Python I';我试图用递归调用实现二叉树插入方法

Python I';我试图用递归调用实现二叉树插入方法,python,binary-tree,Python,Binary Tree,我试图用递归调用实现二叉树插入方法。当我运行insert函数时,它会给我一个AtributeError:BinTree实例没有atribute的根。你能告诉我怎么修理吗 from random import randint class Node: def __init__(self,value): self.value = value self.left = None self.right = None class BinTree:

我试图用递归调用实现二叉树插入方法。当我运行insert函数时,它会给我一个AtributeError:BinTree实例没有atribute的根。你能告诉我怎么修理吗

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()
来自随机导入randint
类节点:
定义初始值(自身,值):
自我价值=价值
self.left=无
self.right=无
类二叉树:
定义初始化(自):
self.root=None
def插入(自身,值):
如果self.root==无:
self.root=节点(值)
其他:
self.\u插入(值,self.root)
定义插入(自身、值、当前节点):
如果值当前节点值:
如果curr_node.right==无:
curr_node.right=节点(值)
其他:
self.\u insert(值,curr\u node.rigth)
其他:
打印('节点已存在!')
def打印树(自身):
如果self.root!=无:
self.\u打印树(self.root)
定义打印树(自身、当前节点):
如果是curr_节点=无:
self.\u打印树(当前节点左)
打印(str(curr_node.val))
self.\u打印树(curr\u node.right)
def fillTree(树):
对于范围内的uu(100):
curr_elem=randint(0,50)
树.插入(当前元素)
回归树
tree=BinTree()
fillTree(树)
tree.printTree()

只有
BinTree
s有
root
s;
二叉树
的子节点是
节点
s,而不是
二叉树
s,因此没有
s。

您的
\u init\u
名称中有键入错误。后面有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()
来自随机导入randint
类节点:
定义初始值(自身,值):
自我价值=价值
self.left=无
self.right=无
类二叉树:
定义初始化(自):
self.root=None
def插入(自身,值):
如果self.root==无:
self.root=节点(值)
其他:
self.\u插入(值,self.root)
定义插入(自身、值、当前节点):
如果值当前节点值:
如果curr_node.right==无:
curr_node.right=节点(值)
其他:
自插入(值,当前节点。右侧)
其他:
打印('节点已存在!')
def打印树(自身):
如果self.root!=无:
self.\u打印树(self.root)
定义打印树(自身、当前节点):
如果是curr_节点=无:
self.\u打印树(当前节点左)
打印(str(当前节点值))
self.\u打印树(curr\u node.right)
def fillTree(树):
对于范围内的uu(100):
curr_elem=randint(0,50)
树.插入(当前元素)
回归树
tree=BinTree()
fillTree(树)
tree.printTree()

Hm谢谢,但我仍然迷恋我的代码。。我应该在这里换什么??