迭代有序二叉树

问题描述 投票:0回答:1

我有以下类用于创建二叉树:

class BinaryTree:

    def __init__(self):
        self._root = None
        self._left = None
        self._right = None

    def root(self):
        return self._root

    def left(self):
        return self._left

    def right(self):
        return self._right

    def isEmpty(self):
        return self._root is None

    def insert(self, element):
        if self.isEmpty():
            self._root = element
            self._left = BinaryTree()
            self._right = BinaryTree()
        elif element <= self._root:
            self._left.insert(element)
        elif element > self._root:
            self._right.insert(element)

    def inOrder(self):
        if self.isEmpty():
            return []
        l = self._left.inOrder()
        l.append(self._root)
        l += self._right.inOrder()
        return l

    def preOrder(self):
        if self.isEmpty():
            return []
        l = [self._root]
        l += self._left.preOrder()
        l += self._right.preOrder()
        return l

    def inOrder_iterative(self):
        stack = []
        res = []
        aux = self

        while aux or stack:
           
            while aux:
                stack.append(aux)
                aux = aux._left

            
            if stack:
                aux = stack.pop()
                res.append(aux._root)

                
                aux = aux._right

        return res

当我插入 inorder(2, 3, 4, 5, 6, 7, 8) 的二叉树时,我按顺序得到它,但每个数字前面都有“None”,如下所示:

[None, 2, None, 3, None, 4, None, 5, None, 6, None, 7, None, 8, None]

我需要它输出:

[2, 3, 4, 5, 6, 7, 8]

我似乎找不到代码中的错误是什么。你能帮我一下吗?

谢谢

编辑:

将数据插入树的代码:

tree=BinaryTree()
tree.insert(5)
tree.insert(3)
tree.insert(4)
tree.insert(2)
tree.insert(7)
tree.insert(6)
tree.insert(8)
print('The binary tree is: ')
print('inOrder recursive', tree.inOrder())
print('inOrden iterative', tree.inOrder_iterative())
python iteration binary-tree inorder preorder
1个回答
0
投票
def iterative_inorder(root):
  stack = []
  current = root
  while current or stack:
    while current:
      stack.append(current)
      current = current.left
    if stack:
      current = stack.pop()
      print(current.data)
      current = current.right
© www.soinside.com 2019 - 2024. All rights reserved.