algorithm - 从 Just Inorder Traversal 中查找预序?

标签 algorithm data-structures tree traversal inorder

我遇到了一个中考题,那是 4 天前的,我无法理解它!

假设我们在对一棵树进行中序遍历时得到了答案,那么我们如何在先序遍历的情况下找到解决方案。我有以下示例:当按顺序遍历树时 E A C K F H D B G;

前序遍历会返回什么?

a. FAEKCDBHG
b. FAEKCDHGB
c. EAFKHDCBG
d. FEAKDCHBG

谁能以学习的方式帮助我?

编辑: 我知道答案是:FAEKCDHGB。但是这是怎么计算的呢?

最佳答案

所以顺序是:

E A C K F H D B G

并且预订必须来自:

a. FAEKCDBHG
b. FAEKCDHGB
c. EAFKHDCBG
d. FEAKDCHBG

您应该继续为这些选项中的每一个绘制树,同时使其适合中序遍历,并查看哪一个是可能的。

为此,对于前序遍历中的每个字符,围绕该字符将中序遍历分成两部分。

一个。

我们知道 F 一定是根。拆分围绕 F 的中序遍历:

        | F | 
 E A C K     H D B G

前序遍历中的下一个字符是A。围绕A拆分包含A的子树:

            | F | 
     | A |        H D B G
    E     C K

下一个是E。没什么可分的。接下来是K:

            | F | 
     | A |        H D B G
    E     C
            K

下一个是C。没有什么可分割的。

下一个是D:

            | F | 
     | A |        | D |
    E     C      H     B G
            K

下一个是B:

            | F | 
     | A |        | D |
    E     C      H     B 
            K            G

我们已经完成了,不会有更多的 split 可能。现在在这棵树上运行前序遍历,你会得到:

F A E C K D H B G

这不是我们的出发点,所以我们得出了一个矛盾。所以它不能是a。对其他人做同样的事情。

关于algorithm - 从 Just Inorder Traversal 中查找预序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29046384/

相关文章:

python - RandomForestRegressor 特征是否作为类别处理?

c++ - 需要包含运行任务时间的二维矩阵的最优解

arrays - 部分排序数组的最短时间?

algorithm - 为什么我们要努力保持树木平衡

java - 如何在java中实现AVL树?为什么compareTo 说来源未知?

java - 如何将 btree 转换为 b+tree

algorithm - 动态图中的最大流

c++ - 迭代器和反向迭代器的区别

javascript - 如何找到 3 个或更多字符串的公共(public)部分?

c++ - 如何在 O(logn) 中查找 STL 中元素的等级