在下面的二进制搜索树(初始)实现中,我正在创建一个对象并尝试调用insert方法来添加节点。输出是错误的,任何人都可以告诉我为什么以及如何解决它?
代码:
class Node():
def __init__(self,data):
#attributes are: node data, left node data and right node data
self.data=data
self.left=None
self.right=None
def print_nodes(self):
print(self.data)
def insert(self,data):
if self.data:
if data<self.data: #if the data passed into insert, is less the existing node
if self.left is None: #if the left node is empty...
self.left=Node(data) #call the Node with t he data given - inserted into left node
else:
self.left.insert(data)
elif data>self.data:
if self.right is None:
self.right=Node(data)
else:
self.right.insert(data)
else:
self.data=data
root=Node(8)
root=Node(3)
root.print_nodes()
root.insert(10)
root.insert(1)
root.print_nodes()
OUTPUT(LOGIC ERROR) 我希望它打印出二叉树中的所有节点,例如8然后是3,但它没有。有没有办法有效/简单地做到这一点?
3
3
>>>
另请注意,只需调用此功能,即可生效并打印8
root=Node(8)
root.print_nodes()
但是
root=Node(8)
root.Insert(3)
root.print_nodes()
的输出为:
8
8
更新
我还尝试根据下面的有用评论添加更高级的打印方法(print_tree)。它现在打印出更多......但输出仍然令人费解。
更新了更新了print_tree方法的代码
class Node():
def __init__(self,data):
#attributes are: node data, left node data and right node data
self.data=data
self.left=None
self.right=None
def print_tree(self):
if self.left:
self.left.print_tree()
print(self.data)
if self.right:
self.right.print_tree()
def insert(self, data):
if self.data:
if data < self.data:
if self.left is None:
self.left = Node(data)
else:
self.left.insert(data)
elif data > self.data:
if self.right is None:
self.right = Node(data)
else:
self.right.insert(data)
else:
self.data = data
root=Node(8)
root.print_tree()
root.insert(3)
root.print_tree()
root.insert(5)
root.print_tree()
输出:
8
3
8
3
5
8
>>>