Python 如何调用函数来计算BST的前序?
我用Python实现了创建二叉搜索树的函数。它当前按顺序显示节点,现在我正试图让它按预先顺序显示 我根据笔记创建了inoorder函数,但我不知道如何让preorder正常工作。现在它显示最左边的节点,但我无法让它返回到右边的节点。我将用示例值发布我的代码。任何能让我走上正轨的建议都将不胜感激。谢谢 我把我所有的代码,只是预订单函数代码 完整的Python代码:Python 如何调用函数来计算BST的前序?,python,binary-search-tree,traversal,preorder,Python,Binary Search Tree,Traversal,Preorder,我用Python实现了创建二叉搜索树的函数。它当前按顺序显示节点,现在我正试图让它按预先顺序显示 我根据笔记创建了inoorder函数,但我不知道如何让preorder正常工作。现在它显示最左边的节点,但我无法让它返回到右边的节点。我将用示例值发布我的代码。任何能让我走上正轨的建议都将不胜感激。谢谢 我把我所有的代码,只是预订单函数代码 完整的Python代码: 请看遍历的解释。您的解决方案非常简单,并且将解释清楚地翻译成代码。Pre-order与in-order的不同之处在于它在树中递归的顺序
请看遍历的解释。您的解决方案非常简单,并且将解释清楚地翻译成代码。Pre-order与in-order的不同之处在于它在树中递归的顺序。除此之外,它同样简单明了。为了使预订单生效,对代码所需的更改同样应该是从订单到预订单的简单更改。下面的代码应该有效:
def inOrder(self):
global dspList2
if(self.left):
self.left.inOrder()
dspList2.append(self.data)
if(self.right):
self.right.inOrder()
def preOrder(self):
global dspList
dspList.append(self.data)
if(self.left):
self.left.preOrder()
if (self.right):
self.right.preOrder()
请注意,与其使用全局变量,不如将其委托给采用累加器的助手方法,这样更安全、更好:
def inOrder(self):
acc = []
self.inOrderAcc(self, acc)
return acc
def inOrderAcc(self, acc):
if (self.left):
self.left.inOrderAcc(acc)
acc.append(self.data)
if (self.right):
self.right.inOrderAcc(acc)
你说你不能让它回到正轨是什么意思?你的代码甚至没有尝试回溯,我想你只是错过了对self.right.preOrder的调用。如果是,我会在第二分钟调用它吗?
def inOrder(self):
global dspList2
if(self.left):
self.left.inOrder()
dspList2.append(self.data)
if(self.right):
self.right.inOrder()
def preOrder(self):
global dspList
dspList.append(self.data)
if(self.left):
self.left.preOrder()
if (self.right):
self.right.preOrder()
def inOrder(self):
acc = []
self.inOrderAcc(self, acc)
return acc
def inOrderAcc(self, acc):
if (self.left):
self.left.inOrderAcc(acc)
acc.append(self.data)
if (self.right):
self.right.inOrderAcc(acc)