algorithm - 如何打印 BST 的中序遍历?

标签 algorithm data-structures binary-search-tree computer-science graph-algorithm

“给出一个执行中序树遍历的非递归算法”。

这不就是标准的深度优先搜索吗?我在网上看到的针对此问题的非递归解决方案都没有做任何真正类似于 DFS 的事情(即使它们都使用堆栈)……我的推理不正确吗?

这是我的伪代码:

public inOrder(节点根): 创建新的 Stack -> s 创建新的 bool 集 -> 已访问 s.push(root) 同时(!s.isEmpty()): 当前节点 = s.pop() 打印(当前节点) 如果(!visited.contains(currNode)): visited.add(当前节点) 如果(currNode.right != null): s.push(currNode.right) 如果(currNode.left!= null): s.push(currNode.left)

最佳答案

DFS 不一定是有序的,尽管有序就是 DFS。查看wikipedia article .任何递归函数都可以用堆栈非递归地实现(因为递归使用堆栈)。

通过将您的代码与维基百科文章中的前序、中序和后序遍历进行比较,您可以看到,您的代码遍历是预序的,因为它在子节点之前打印父节点。为了使这个实现成为中序遍历,必须先打印左节点。这可以通过

  1. 检查 currNode.left 是否不为空且未被访问
  2. 如果 (1) 为真,推送 currNodecurrNode.left
  3. 如果(1)为假,将currNode添加到访问集,打印currNode,如果存在currNode.right则推送。

关于algorithm - 如何打印 BST 的中序遍历?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38362311/

相关文章:

c# - 二叉树中的 "marker for NULL pointers"是什么?

c++ - std::lower_bound 不专门用于红黑树迭代器是否有任何技术原因?

javascript - 如何扩大光华的半径?

php - 如何解决整数是否有整数根?

algorithm - 合并无向图中的循环以创建树

algorithm - 更改优先级队列中项目的优先级

算法 - 如何生成日期结构?

c++ - 如何使用链表创建交集函数?

java - 在BST中查找总计为所提供值的元素

algorithm - 从具有 2 个节点的二叉搜索树中删除一个节点,是否可以使用不同的方法?