Python 3.x 无法在二叉树中插入节点
我正在尝试编写一个简单的二叉树类,其中包含插入和删除节点的方法。我编写的insert_node方法没有将节点添加到树中。我认为在使用该方法插入节点时,对二叉树对象的引用丢失了。帮我找出原因Python 3.x 无法在二叉树中插入节点,python-3.x,Python 3.x,我正在尝试编写一个简单的二叉树类,其中包含插入和删除节点的方法。我编写的insert_node方法没有将节点添加到树中。我认为在使用该方法插入节点时,对二叉树对象的引用丢失了。帮我找出原因 class Node: def __init__(self, data): self.data = data self.left = None self.right = None class binary_tree: def __init_
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
class binary_tree:
def __init__(self, data):
self.root = Node(data)
def insert_node(self, data):
queue = []
queue.append(self.root)
while queue:
temp = queue.pop(0)
if temp is None:
temp = Node(data)
else:
queue.append(temp.left)
queue.append(temp.right)
您可以查看,也可以使用:
def insert_node(self, data):
queue = []
temp = self.root
queue.append(temp)
# Do level order traversal until we find
# an empty place.
while (queue):
temp = queue.pop(0)
if (not temp.left):
temp.left = Node(data)
break
else:
queue.append(temp.left)
if (not temp.right):
temp.right = Node(data)
break
else:
queue.append(temp.right)
请看这行代码:
temp = Node(data)
在这里您创建了新节点,为了将其添加到树中,您应该在其父节点中将其设置为left
或right
。在队列中
您应该保存父节点,同时保存左、右子节点,因此当您要插入新节点时,您没有对父节点的引用:
parent
/ \
left right
例如,is left是None
,您应该将新节点作为left插入父节点,但您不保留对其父节点的引用,您的队列中只有None
(左节点)
带注释的更正代码:
class binary_tree:
def __init__(self, data):
self.root = Node(data)
def insert_node(self, data):
queue = [self.root] # start from root, it's always not None
while queue:
temp = queue.pop(0) # get current parent node
if temp.left is None: # if left child doesn't exist, add new node as left child for parent
temp.left = Node(data)
return # node added, exit
elif temp.right is None: # if right child doesn't exist, add new node as right child for parent
temp.right = Node(data)
return # node added, exit
else: # both child nodes exist - add them to queue
queue.append(temp.left)
queue.append(temp.right)