二进制搜索树Inorder遍历Python给出递归错误

时间:2017-10-11 19:28:27

标签: python recursion binary-tree

我正在尝试实现二叉树,我认为树实现工作正常,因为我能够在树中使用if 8找到我的元素。但是当我尝试执行inOrder Traversal时,我遇到了递归错误。

class BinaryNode: def init(self,value): self.value = value self.left = None self.right = None

class BinaryTree:
    def __init__(self):
        self.root = None

    def add(self, value):
        if self.root == None:
            self.root = BinaryNode(value)
        else:

            current = self.root

            while 1:

                if value <= current.value:

                    if current.left:
                        current = current.left
                    else:
                        current.left = BinaryNode(value)
                        break     

                elif value > current.value:

                    if current.right:
                        current = current.right
                    else:
                        current.right = BinaryNode(value)
                        break      

                else:
                    break 


    def __contains__(self, target):
        node = self.root
        while node is not None:
            if node is not None:
                if target < node.value:
                    node = node.left
                elif target > node.value:
                    node = node.right
                else:
                    return True
        return False


    def inorder(self,node):
        node = self.root   

        if node is not None:          
            self.inorder(node.left)
            print (node.value)
            self.inorder(node.right)
</code>

tree = BinaryTree()
arr = [8,3,1,6]
for i in arr:
    tree.add(i)

print (tree.root.value)
print ('Inorder Traversal')
tree.inorder(tree.root) 

class BinaryTree: def __init__(self): self.root = None def add(self, value): if self.root == None: self.root = BinaryNode(value) else: current = self.root while 1: if value <= current.value: if current.left: current = current.left else: current.left = BinaryNode(value) break elif value > current.value: if current.right: current = current.right else: current.right = BinaryNode(value) break else: break def __contains__(self, target): node = self.root while node is not None: if node is not None: if target < node.value: node = node.left elif target > node.value: node = node.right else: return True return False def inorder(self,node): node = self.root if node is not None: self.inorder(node.left) print (node.value) self.inorder(node.right) </code> 我得到的错误是“RecursionError:超出最大递归深度”:(我试图在通话前检查该节点是不是没有,不知道我哪里出错了

0 个答案:

没有答案