程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 算法:由後序遍歷和中序遍歷求前序遍歷

算法:由後序遍歷和中序遍歷求前序遍歷

編輯:C++入門知識

假設一棵二叉樹的後序遍歷序列為 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(轉載請說明出處)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved