考研複試上機C 前序,中序,後序序列的轉換

2021-09-11 23:35:48 字數 1313 閱讀 6933

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...