通过先序和中序,或者中序和后序的结果,可以还原一颗二叉树。中序为必要的,先序和后序有一个即可。
步骤为:
(1)确定根结点:先序第一个,或后序最后一个为根结点;
(2)确定左右子树:在中序的根节点左边的为左子树序列,右边的为右子树序列;
(3)确定左右子树中的孩子结点:其孩子为先序中先出现的,或后序中后出现的;
循环(2)(3)即可完成。
例:
先序为:1,2,4,5,10,11,3,6,7
中序为:4,2,10,5,11,1,6,3,7
图示还原过程:
第一步,先序的第一个,即1为根节点,在中序的1左边为左子树,右边为右子树,且左子树中的2在先序中先出现,为1的左孩子,右子树中的3在先序中先出现,为1的右孩子。
第二步,对于2,4为其左子树(即左孩子),10、5、11为其右子树,其中5在先序中先出现,为2的右孩子。
第三步,对于5,10为其左子树(左孩子),11为其右子树(右孩子)