題目:
已知二叉樹的先序和中序遍歷字串
,程式設計實現輸出後序遍歷字串
,如果沒有成功輸出
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...