“提供执行inorder树步行的非递归算法”。
这不仅仅是标准的深度搜索吗?我在网上看到这个问题的非递归解决方案都没有做任何真正类似DFS的事情(即使它们都使用了堆栈)......我的推理是不正确的?
这是我的伪代码:
public inOrder(Node root):
create new Stack -> s
create new boolean set -> visited
s.push(root)
while(!s.isEmpty()):
currNode = s.pop()
print(currNode)
if(!visited.contains(currNode)):
visited.add(currNode)
if(currNode.right != null):
s.push(currNode.right)
if(currNode.left != null):
s.push(currNode.left)
答案 0 :(得分:0)
DFS不一定是有序的,尽管有序是DFS。请参阅wikipedia article。任何递归函数都可以使用堆栈非递归地实现(因为递归使用堆栈)。
正如您可以通过将代码与维基百科文章中的前,中,和后序遍历进行比较所看到的,您的代码遍历是预先订购的,因为它会在子代码之前打印父节点。为了使此实现成为有序遍历,必须首先打印左节点。这可以通过
来完成--junit-directory
是否为空且未访问currNode.left
和currNode
currNode.left
添加到访问集,打印currNode
,然后按currNode
(如果存在)。