我遇到了一个中期考试问题,这个问题花了4天时间,我开始讨厌它!
假设我们在对树进行顺序遍历时给出了答案,那么在前序遍历的情况下我们将如何找到解决方案。我有以下示例:当顺序遍历树时E A C K F H D B G
;
前序遍历会返回什么?
a. FAEKCDBHG
b. FAEKCDHGB
c. EAFKHDCBG
d. FEAKDCHBG
谁可以帮助我学习?
编辑: 我知道答案是:FAEKCDHGB。但这是如何计算的?
答案 0 :(得分:5)
所以顺序是:
E A C K F H D B G
预购必须来自:
a. FAEKCDBHG
b. FAEKCDHGB
c. EAFKHDCBG
d. FEAKDCHBG
您应该继续为每个选项绘制树,同时使其适合inorder遍历并查看可能的那个。
为此,对于前序遍历中的每个字符,将围绕该字符的inorder遍历拆分为两个。
<强>一个。强>
我们知道F
必须是根。拆分F
周围的inorder遍历:
| 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
我们已经完成了,不会有更多的分裂。现在在这棵树上运行preorder遍历,你会得到:
F A E C K D H B G
这不是我们开始的,所以我们达成了矛盾。所以它不能 a。为其他人做同样的事情。
答案 1 :(得分:2)
答案是未定义的。
看看这两棵树:
E
\
A
\
C
\
K
\
F
\
H
\
D
\
B
\
G
和
A
/ \
E C
\
K
\
F
\
H
\
D
\
B
\
G
这两个树具有相同的有序遍历,但第一个具有EACKFHDBG
的预先遍历,而第二个具有AECKFHDBG
的有序遍历
因此,给定一个有序遍历,有多个可能的二叉树适合遍历。这是因为有n!
个可能的排列(因此有序遍历),而there are much more binary trees。这保证了(pigeonhole principle)存在(至少一个)适合多个树的有序遍历。
答案 2 :(得分:0)