二叉樹的三種遍歷的相互轉化 已知先序中序求後序

2021-06-09 17:58:09 字數 927 閱讀 6430

題目:

已知二叉樹的先序和中序遍歷字串

,程式設計實現輸出後序遍歷字串

,如果沒有成功輸出

failed,

最後分析時間和空間複雜度。

經典題目,也是網易遊戲2023年遊戲開發工程師的一道筆試題。

分析:二叉樹的題目基本上都是要用遞迴的,這題也一樣。

而遞迴的核心是找到結構相同的子問題。

二叉樹如下所示:

a↙   ↘

b         c

↙↘        ↘

d      e          g

前序: abdecg

中序: dbeacg

由前序的第乙個a,可以把樹分為兩個部分,左子樹和右子樹。

在中序序列中找到a,左邊部分則是左子樹的中序,右邊則是右子樹的中序,

同樣前序a的後面緊跟著左子樹的前序和右子樹的前序。

則問題可分解為兩個結構相同的小問題。

1,先求左子樹的後序;

2,求右子樹的後序;

3,再將左子樹和右子樹的後序串起來,最後加上本身節點即可。

**:#include #include using namespace std;

string findpostorder( string pre_order, string in_order );

int _tmain(int argc, _tchar* argv)

string findpostorder( string pre_order, string in_order )

if( pre_order.length() == 1 ) //遞迴終止

{ if( pre_order != in_order ) //乙個元素時前序中序不相等

{ cout << "failed" <

二叉樹三種遍歷的相互轉換

1.已知先序中序求後序 只要掌握各個遍歷的特點,就能輕鬆解決問題 先序 給定了根的遍歷順序 中序 根的左右兩邊分別為左子樹和右子樹 所以可以通過控制根的位置 遞迴進入左子樹和右子樹 控制格式輸出即可 include define n 1005 using namespace std int a n ...

二叉樹的三種遍歷

重新又看了一遍二叉樹 binary tree 發現很多東西自己還沒有弄明白,原來三種遍歷方式還不是自己想象中的那樣 前序遍歷 preorder 是先輸出自己,然後左,最後右。中序遍歷 inorder 是先左,再輸出自己,最後右。後序遍歷 postorder 是先左,再右,最後輸出自己。所謂的xx遍歷...

二叉樹的三種遍歷

在這裡說一下二叉樹的三種遍歷 前序,中序,後序 正文 前序遍歷 是指先從根開始,再依次找尋左子結點 右子結點。學習時的經驗就是 看圖學習 第乙份圖 這樣看來 1.先找最基本的根結點 詞窮 這裡是a。2.接著找以a為根結點的左子結點,這裡是b。3.而以b為根結點也會出現左右結點,這就又有了乙個左結點d...