Python I';我试图用递归调用实现二叉树插入方法
我试图用递归调用实现二叉树插入方法。当我运行insert函数时,它会给我一个AtributeError:BinTree实例没有atribute的根。你能告诉我怎么修理吗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:
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谢谢,但我仍然迷恋我的代码。。我应该在这里换什么??