“给出一个执行有序树遍历的非递归算法”。难道这不是一个标准的深度优先搜索吗?我在网上看到的解决这个问题的非递归解决方案都没有做过真正类似于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) 最佳答案 dfs不一定按顺序排列,尽管按顺序排列的是dfs。请参见wikipedia article任何递归函数都可以用堆栈非递归地实现(因为递归使用堆栈)。通过将代码与wikipedia文章中的pre-order、in-order和post-order遍历进行比较可以看出,代码遍历是pre-order的,因为它在子节点之前打印父节点。为了使这个实现成为有序遍历,必须首先打印左节点这可以通过检查currNode.left是否不为空且未被访问如果(1)为真,则按下currNode和currNode.left如果(1)为false,则在所访问的集合中添加currNode,打印currNode,并在存在时按下 >。关于algorithm - 如何打印BST的有序遍历?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38362311/
10-11 21:26