来自Sun(现在是 Oracle,我猜...)论坛的明目张胆的复制和粘贴:
问题:
任何人都可以帮助我如何从中序和后序遍历构造二叉树,我只想知道该算法以便我可以应用它。答案:
设p_1为p_2...p_n后序遍历,设i_1为i_2...i_n中序遍历。从后序遍历我们知道树的根是p_n。在中序遍历中找到这个元素,比如i_1,i_2...i_k-1p_ni_k+1...i_n。通过中序遍历,我们分别找到左子树 iei_1和i_2...i_k-1右子树 ie中的所有元素。i_k+1...i_n删除元素
p_n(和元素i_k==p_n)。p_j找到中最右边的元素p_1,p_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
作者:乔萨.
我按照乔斯的指示实现了该算法,并且效果非常好!