enter code here
class Node:
def __init__(self,data=None):
self.data = data
self.left = None
self.right = None
class binary_tree:
def __init__(self):
self.root = None
def insert(self,data):
if self.root is None:
self.root = Node(data)
else:
cur_node = self.root
while cur_node !=None :
if data < cur_node.data:
if cur_node.left is None:
cur_node.left = Node(data)
print(cur_node.left.data)
else:
cur_node = cur_node.left
elif data > cur_node.data:
if cur_node.right is None:
cur_node.right = Node(data)
print(cur_node.right.data)
else:
cur_node = cur_node.right
else:
print("value already exist")
binary = binary_tree()
b = binary.insert(5)
e = binary.insert(4)
h = binary.insert(7)
print(h)二进制搜索树的实现,插入方法不像预期的那样工作,向右侧插入节点会出现错误吗?如何使这个代码错误不受影响?二叉树搜索树实现。
发布于 2022-02-28 11:39:11
代码的问题是它被卡在while循环中。注意到,条件是cur_node != None永远不会是真的。这可以很容易地从以下几个方面推断出来:
当循环至少执行一次之前,初始条件总是None.
self.root不是true时,才能到达这个分支-- while循环的主体--我们总是为cur_node分配一个非-None值。cur_node = cur_node.left时cur_node.left不是None,cur_node = cur_node.right时cur_node.right不是None因此,我们需要以某种方式摆脱这个循环。解决这一问题的可能方法之一是,在找到插入项目的位置后,将while循环的条件更改为True以更好地表达我们的意图,并将循环中的break (或return)更改为:
cur_node = self.root
while True :
if data < cur_node.data:
if cur_node.left is None:
cur_node.left = Node(data)
return # break is also possible
else:
cur_node = cur_node.left
elif data > cur_node.data:
if cur_node.right is None:
cur_node.right = Node(data)
return # break is also possible
else:
cur_node = cur_node.right我还注意到,在您的测试中,您编写的代码像insert一样返回一些内容,但实际上没有,所以应该像下面这样调用insert
binary.insert(5)
binary.insert(4)
binary.insert(7)
print(binary.root.data) # 5
print(binary.root.left.data) # 4
print(binary.root.right.data) # 7如果希望insert返回某项内容,首先需要定义它应该返回的内容(例如插入节点),然后适当地更改代码。
https://stackoverflow.com/questions/71256475
复制相似问题