binary-tree - 通过修改 morris 遍历实现 PreOrder 和 PostOrder 遍历

标签 binary-tree tree-traversal

morris 遍历非常适用于 O(n) 时间和 O(1) 空间的 InOrder 遍历。是否有可能仅通过更改一些东西来使用相同的算法实现 PreOrder 和 PostOrder 遍历。

最佳答案

我不认为我们可以使用线程实现后序。
在后序中,我们必须遍历两个 child ,然后是他们的 parent 。
我们可以建立一个从 child 到 parent 的链接,但之后我们不能去这个 parent ,因为他们没有链接。(一个指向左 child ,一个指向它的右 child 没有向上)

             1
            / \
           2   3
          / \
         4   5

我们可以在 4 的右节点创建一个指向节点 5 的线程。
我们可以在 5 的右节点创建一个指向节点 2 的线程。

但是在节点 2 没有空指针来创建任何线程。节点 2 已经有指向节点 4 和 5 的指针。

关于binary-tree - 通过修改 morris 遍历实现 PreOrder 和 PostOrder 遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9058674/

相关文章:

c# - 在统一问题中展示二叉树

algorithm - 插入 BST 时,插入的第一项是否总是树的根?

algorithm - 使用标签重新排列树

C++,如何创建和绘制二叉树然后在预购中遍历它

algorithm - 逐层读取二叉树。最快的方法是什么?

algorithm - 什么是没有。具有 n 个标记节点的不同二叉树的可能性?

java - 二叉树节点计数的递归方法

c++ - 作业求助,无效参数二叉树

javascript - 如何反向遍历树结构

c - 递归树遍历,为树的每个叶子返回一个变量