中序 和前序 後序建樹

2021-09-13 01:39:16 字數 2450 閱讀 7875

基本思路是遞迴,引數是 i, j 是 絕對座標,想對於 整體的座標

參考自:

#include

#include

#include

using

namespace std;

string pre =

"abdhlekcfg"

;

string mid =

"hldbekafcg"

;

string post =

"lhdkebfgca"

;struct node

;void

premtree

(node*

&r,int i,

int j,

int len)

;void

postmtree

(node*

&r,int i,

int,

int len)

;void

preprint

(node* r)

;void

postprint

(node* r)

;int

main()

void

premtree

(node*

&r,int i,

int j,

int len)

r =new node;

r->left =

null

; r-

>right =

null;

r->val = pre[i]

;// cout<<"r->val: "int flag;

for(

int k=

0;ksize()

;k++)}

premtree

(r->left,i+

1,j,flag-j)

;premtree

(r->right,i+

(flag-j)+1

,flag+

1,len-

(flag-j)-1

);}void

postmtree

(node*

&r,int i,

int j ,

int len)

r =new node;

r->val = post[i]

; r-

>left =

null

; r-

>right =

null

;int flag;

for(

int k=

0;ksize()

;k++)}

postmtree

(r->left,i-

(len-

(flag-j)-1

)-1,j,flag-j)

;postmtree

(r->right,i-

1,flag+

1,len-

(flag-j)-1

);}void

preprint

(node* r)

}void

postprint

(node* r)

}

後記:

我感覺這中題目還是不能多想,最好還是備註吧。

要注意遞迴終止的條件:(1),如果左右座標一樣,那就只剩乙個了,返回該根;(2)左右元素長度均大於0;

注意在遞迴的時候,其實不複雜,函式變數包括:原始的兩個陣列,pl,pr, vl, vr。

其中,pl ,pr的更新稍複雜一點,vl ,vr的更新及其簡單;pl在left樹中的更新也僅僅+1即可。

劍指offer上的原題:

/**

* definition for binary tree

* struct treenode

* };

*/class

solution

treenode*

bt(vector<

int>pre,vector<

int>vin,

int pl,

int pr,

int vl,

int vr)

int len_left = k-vl;

int len_right = vr-k;

if(len_left>

0)root-

>left =

bt(pre,vin,pl+

1,pl+len_left,vl,k-1)

;if(len_right>

0)root-

>right =

bt(pre,vin,pl+len_left+

1,pr,k+

1,vr)

;return root;}}

;

前序遍歷 中序遍歷 建樹和後序遍歷方法

這裡注意首先根據前序遍歷找出根,然後分割二叉樹進行建樹。一定要在紙上畫一畫,用k做為子樹的大小,prel,prer,inl,inr等作為樹的邊界,再加上prel prer的跳出條件,就能完成了。include using namespace std int pre 10 int in 10 type...

前序中序後序

遍歷情況 前序 根結點 左子樹 右子樹 中序 左子樹 根結點 右子樹 後序 左子樹 右子樹 根結點 例題一 輸入描述 input description 輸入檔案共2行,第一行表示該樹的前序遍歷結果,第二行表示該樹的後序遍歷結果。輸入的字符集合為,長度不超過26。輸出描述 output descri...

二叉樹的前序中序,中序後序建樹

tree creat1 int len,char s1,char s2 長度 s1起始點位址 s2起始點位址 a bdfghie c t data s1 0 fdhgibe a c t l creat1 i,s1 1,s2 s1 1將先序第乙個根節點空過去 t r creat1 len i 1,s1...