所以我试图创建一个方法,将二进制搜索树的所有节点都返回给我,而不删除它们。我想让我的数据结构不受影响。 但我无法找到办法!
唯一认为a成功的是创建一个pop方法,返回bst的根(克隆),然后删除它。代码是这样的:
def pop(self):
#Empty tree.
if self.root == None:
return None
#Copy the root.
return_node = self.root.clone()
#Find MAX Node.
if self.root.left != None:
#Starting node.
MAX = self.root.left
#Find max node.
while MAX.right != None:
MAX = MAX.right
#Swap data with root.
self.root.swap_data(MAX)
#Destroy max node.
MAX.destroy()
#Find MIN Node.
elif self.root.right != None:
#Starting node.
MIN = self.root.right
#Find max node.
while MIN.left != None:
MIN = MIN.left
#Swap data with root.
self.root.swap_data(MIN)
#Destroy max node.
MIN.destroy()
#Else set root to none.
else:
self.root = None
#Return the poped node.
self.size -= 1
return return_node
所以这段代码就像这个循环的魅力一样:
node = tree.pop()
while node != None:
#Do something with current node
node = tree.pop() #Keep moving.
但问题是树最终会被破坏。
之后我认为遍历方法可以做到这一点但是 我无法成功。
def preorder(self, root):
if root == None:
return
#Do something here.
#But how am i going to return all the nodes
#Using this traversal method?
self.preorder(root.left)
self.preorder(root.right)
那么有没有办法从二叉搜索树中获取所有项目 没有破坏它?
答案 0 :(得分:2)
如果没有代码实现您的BST并且没有您希望结果看起来像,那么很难说清楚。
您提供的pop方法不正确。在删除节点期间,可能有3种情况:
似乎你正在重新发明轮子,但是在Python here中几乎有标志性的BST实现
希望有所帮助。