前序可知A是根结点,由A在中序中的位置可以看出A的左子树上包括DBGE四个结点,右子树上包括CHF三个结点。由前序列可以看出B结点是左子树的根结点,再结合B在上述四个结点中的位置可以得出B的左子树为D右子树包含GE两个结点。由前序列E在G前面,说明E是B的右结点,中序排列中G在E前面说明G是E的左结点,A的右子树也可以这样推出来。
画图最简单了,由第一序列先画上根结点A,第一数列中第二位是B,在第二个数列中B在已确定的A的左侧,那么B就是A的左结点,B也确定了。第一数列中第三位是D,D在第二数列中位于已确定的B的左侧,那D就是B的左结点;第一数列中第四个是E,E在第二个数列中已确定的B的右侧,那么E就是B的右结点;第五个是G,G在第二数列中位于已确定的E的左侧,那么G就是E的左结点;第六个是C,C在第二个数列中位于已确定点A的右侧,C是A的右结点;下一个是F,F在已确定结点C的右侧,F是C的右结点;最后一个H,H在C的右侧F的左侧,则F是C的左结点。好了整个二叉树出来了,后序遍历自己看就行了。
由前序遍历确定根的位置,中序遍历确定左右子树包括的结点,然后分成两棵子树的相同子问题来递归求解,如此即可确定树的结构,后序遍历就没问题了。
(DBGE)A(CHF)→((D)B(GE))A(C(HF)→((D)B((G)E))A(C((H)F),
所以后序遍历为DGEBHFCA
前序就是先根,则A必定是根!!!
从中序就能从A一分为二,分别为左与右的子树;
中序: 左子中序 DBGE 右子中树 CHF
再从前序中分出左、右子树:
前序 左子前序: BDEG 右子前序 CFH
这个问题递归成两个小问题。同样的方法再分析出两个子树