1. 程式人生 > >已知中序遍歷序列和後序遍歷序列,求先序遍歷

已知中序遍歷序列和後序遍歷序列,求先序遍歷

通過中序遍歷和後序遍歷求先序

  • 中序:BDCEAFHG
  • 後序:DECBHGFA
  • 求先序遍歷結果:

先求原始二叉樹
後序遍歷中最後出現的是根,所以A是整棵樹的根,在結合中序遍歷來看
BDCE是A的左子樹,而FHG是A的右子樹,所以我們就有了下面的圖:
原始二叉樹1
而BDCE序列中誰是整個序列根,還得看後序誰最後出現,答案是B
此時再看中序中根B左端沒有左子樹,右端有DCE,所以DCE是B的右子樹
我們得到下面的圖:
原始二叉樹2
再看D、C、E在後序遍歷中C結點最後出現,所以C是根,此時再到中序遍歷看可以看到C的左端是D, 右端是E, 所以C的左子樹是D, 右子樹是E, 於是我們得到下圖:
原始二叉樹三


再看F、H、G三個結點,後序遍歷序列F最後出現,所以F是根結點,
再回去看中序HG在F右端,所以HG是F的右子樹得到下圖:
原始二叉樹四
由於H、G在後序遍歷序列G最後出現,所以G是H, G中的根,再看
中序中G左端只有一個H, 所以H是G的左子樹,得到最終原始二叉樹:
原始二叉樹五
我們再根據上面的這個原始二叉樹退出前序遍歷序列的結果:
前序遍歷結果:ABCDEFGH