构造一棵树

Car*_*lin 5 algorithm tree traversal data-structures

如何根据其顺序和前序遍历来构造树?我只是在寻找一种有效的算法.

Bar*_*ers 4

来自Sun(现在是 Oracle,我猜...)论坛的明目张胆的复制和粘贴:

问题:
任何人都可以帮助我如何从中序和后序遍历构造二叉树,我只想知道该算法以便我可以应用它。

答案:
p_1p_2 ... p_n后序遍历,设i_1i_2 ... i_n中序遍历。从后序遍历我们知道树的根是p_n。在中序遍历中找到这个元素,比如i_1, i_2 ... i_k-1 p_n i_k+1 ... i_n。通过中序遍历,我们分别找到左子树 iei_1i_2 ... i_k-1右子树 ie中的所有元素。i_k+1 ... i_n

删除元素p_n(和元素i_k == p_n)。p_j找到中最右边的元素p_1p_2 ... p_j ... p_n-1其中是, ...p_j中的元素。这是原始树的左子树的根。拆分,并且...并且,并且。现在您有两个子序列,分别表示原始树的两个子树的后序和中序遍历。i_1i_2i_k-1p_1p_2 ... p_jp_j+1p_n-1i_1i_2 ... i_k-1i_k+1 ... i_n

作者:乔萨.

我按照乔斯的指示实现了该算法,并且效果非常好!