string a,b//a用來儲存前序序列,b用來儲存中序序列
string a,b//a用來儲存後序序列,b用來儲存中序序列
void post(int b1,e1,int b2,int e2)//b1,e1和b2,e2分別為前序序列和中序序列的開始下標和終止下標
void pre(int b1,e1,int b2,int e2)//b1,e1和b2,e2分別為後序序列和中序序列的開始下標和終止下標
第一步,先利用前序序列首字元即為根節點的性質,然後找出根節點字元在中序序列中的位置,然後遞迴劃分根節點的左子樹與右子樹的區間,依次輸出左子樹,右子樹,根節點
注意:中序序列用來劃分左右子樹區間
架構如下
void post(int b1,e1,int b2,int e2)
第一步,先利用後序序列尾字元即為根節點的性質,然後找出根節點字元在中序序列中的位置,然後遞迴劃分根節點的左子樹與右子樹的區間,依次輸出根節點,左子樹,右子樹
注意:中序序列用來劃分左右子樹區間
架構如下
void pre(int b1,e1,int b2,int e2)
#pragma warning(disable:4786)
#include #include #include using namespace std;
string a,b;
void post(int b1,int e1,int b2,int e2);//已知前序和中序序列,求後序序列
void pre(int b1,int e1,int b2,int e2);//已知後序和中序序列,求前序序列
void post(int b1,int e1,int b2,int e2)
//求出根節點字元在中序的位置x,意味著左子樹有x-b2個字元,右子樹有e2-x個字元
post(b1+1,b1+x-b2,b2,x-1);//遞迴到左子樹
post(b1+x-b2+1,e1,x+1,e2);//遞迴到右子樹
coute1
return;
for(int x=b2;x<=e2;x++)
//求出根節點字元在中序的位置x,意味著左子樹有x-b2個字元,右子樹有e2-x個字元
cout<>a;
cin>>b;
//已知前序和中序序列,求後序序列
//post(0,a.size()-1,0,b.size()-1);
//cout
pre(0,a.size()-1,0,b.size()-1);
cout
}
由中序和後序(前序)序列求前序(後序)序列
已知二叉樹的中序和後序 前序 序列可以唯一確定一顆二叉樹,例如,中序序列 1 2 3 4 5 6 後序序列 3 4 2 6 5 1 可以唯一確定一顆二叉樹,如下圖 思路是這樣的 我們知道對於一顆二叉樹,根節點是後序遍歷序列的最後乙個,找到根節點後,我們由中序遍歷的特點知道,中序序列中,根節點 左邊的...
前序中序後序
遍歷情況 前序 根結點 左子樹 右子樹 中序 左子樹 根結點 右子樹 後序 左子樹 右子樹 根結點 例題一 輸入描述 input description 輸入檔案共2行,第一行表示該樹的前序遍歷結果,第二行表示該樹的後序遍歷結果。輸入的字符集合為,長度不超過26。輸出描述 output descri...
前序中序求後序 後序中序求前序層次 模板
這是資料結構的知識。剛開始先拒絕用指標去寫。當我把這個想法和別人分享是,別人說不喜歡用指標的程式設計師不是乙個好的c c 程式設計師。所以,就有了這麼勵志的時刻,我參考大牛的 自己用指標寫了個遍,直接1a 不用指標總是出現各種想不到的錯誤。心累。orz.include include include...