我正在尝试通过递归调用实现二叉树插入方法

时间:2019-09-24 12:43:55

标签: python binary-tree

我正在尝试通过递归调用实现二叉树插入方法。当我运行插入功能时,它给了我一个AtributeError:BinTree实例没有atribute'root。您能告诉我如何解决吗?

from random import randint
class Node:
    def __init__(self,value):
        self.value = value 
        self.left = None
        self.right = None

class BinTree:
    def __init___(self):
        self.root = None
    def insert(self, value):
        if self.root == None:
            self.root = Node(value)
        else:
            self._insert(value, self.root)
    def _insert(self, value, curr_node):
        if value < curr_node.value:
            if curr_node.left == None:
                curr_node.left = Node(value)
            else:
                self._insert(value, curr_node.left)
        elif value>curr_node.value:
            if curr_node.right == None:
                curr_node.right = Node(value)
            else:
                self._insert(value, curr_node.rigth)

        else:
            print('Node already exist!')
    def printTree(self):
        if self.root != None:
            self._printTree(self.root)
    def _printTree(self, curr_node):
        if curr_node !=None:
            self._printTree(curr_node.left)
            print(str(curr_node.val))
            self._printTree(curr_node.right)

def fillTree(tree):
    for _ in range(100):
        curr_elem = randint(0,50)
        tree.insert(curr_elem)
    return tree
tree = BinTree()
fillTree(tree)
tree.printTree()

2 个答案:

答案 0 :(得分:1)

您的__init__的名字有错字。有3个下划线。更改为:

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

您的代码应该可以工作

编辑:发现了另外两个问题。这是完整的固定代码:

from random import randint
class Node:
    def __init__(self,value):
        self.value = value
        self.left = None
        self.right = None

class BinTree:
    def __init__(self):
        self.root = None
    def insert(self, value):
        if self.root == None:
            self.root = Node(value)
        else:
            self._insert(value, self.root)
    def _insert(self, value, curr_node):
        if value < curr_node.value:
            if curr_node.left == None:
                curr_node.left = Node(value)
            else:
                self._insert(value, curr_node.left)
        elif value>curr_node.value:
            if curr_node.right == None:
                curr_node.right = Node(value)
            else:
                self._insert(value, curr_node.right)

        else:
            print('Node already exist!')
    def printTree(self):
        if self.root != None:
            self._printTree(self.root)
    def _printTree(self, curr_node):
        if curr_node !=None:
            self._printTree(curr_node.left)
            print(str(curr_node.value))
            self._printTree(curr_node.right)

def fillTree(tree):
    for _ in range(100):
        curr_elem = randint(0,50)
        tree.insert(curr_elem)
    return tree
tree = BinTree()
fillTree(tree)
tree.printTree()

答案 1 :(得分:0)

只有BinTree个拥有root个; BinTree的子元素是Node,而不是BinTree,因此没有root