假設一棵二叉樹的後序遍歷序列為 DGJHEBIFCA ,中序遍歷序列為 DBGEHJACIF ,求前序遍歷。
整體思路是這樣的,由後序遍歷找到每個節點,然後由中序遍歷判斷左右子樹,將整個二叉樹還原後寫出前序遍歷。
後序遍歷的順序知道,最後一個A是二叉樹的根節點,
然後把中序遍歷從A分成兩段,A左邊的是左子樹,A右邊的是右子樹,
結果如下
然後看右邊的子樹,
從後序遍歷知道,左子樹的後序遍歷為IFC,中序遍歷為CIF
問題回到剛開始,重復之前的過程,由後序遍歷知道根節點為C,把中序遍歷從C分成兩段,
左邊是左子樹,右邊是右子樹
也就是右邊只有一個右子樹,
然後再次重復以上過程,現在IF的後序遍歷是IF,中序遍歷是IF,說明
節點時F,I是F的左子樹
這樣,這棵二叉樹的右子樹就完全復原了,左子樹的方法完全相同,就是一個遞歸過程,流程圖如下
NEXT:
最後得到的完整二叉樹如下:
然後寫出前序遍歷就可以了,是ABDEGHJCFI
用算法可以實現的,暫時留在這。
作者:jason0539
微博:http://weibo.com/2553717707
博客:http://blog.csdn.net/jason0539(轉載請說明出處)