根據前序序列(或後序序列)和中序序列構造二叉樹

2021-10-10 19:51:37 字數 1622 閱讀 4760

前序加中序

void

create

(bitree &t,

int*pre,

int*in,

int n)

t=new bitnode;

t->data=

*pre;

int*p;

for(p=in;p(*p==

*pre)

break

;int k = p-in;

//下面兩句話比較關鍵

//左子樹前序向右移動1,中序不動,大小變為k

create

(t->lchild,pre+

1,in,k)

;//右子樹前序移動k+1,中序也移動k+1,大小變為n-k-1

create

(t->rchild,pre+k+

1,in+k+

1,n-k-1)

;//與後序的區別在於,後序左子樹不移動,右子樹移動k,比前序少1

}

後序加中序:

void

create

(bitree &t,

int*post,

int*in,

int n)

t =new bitnode;

t->data=

*(post+n-1)

;int

*p;for

(p=in;p)int k=p-in;

create

(t->lchild,post,in,k)

;create

(t->rchild,post+k,in+k+

1,n-k-1)

;}

例題:根據後序序列與中序序列構造二叉樹並且層序輸出二叉樹

l2-006 樹的遍歷 (25分)

#include

using

namespace std;

typedef

struct node

bitnode,

*bitree;

//queueq;

void

create

(bitree &t,

int*pre,

int*in,

int n)

t =new bitnode;

t->data=

*(pre+n-1)

;int

*p;for

(p=in;p)int k=p-in;

create

(t->lchild,pre,in,k)

;create

(t->rchild,pre+k,in+k+

1,n-k-1)

;}/*void re(bitree &t)

*/void

print

(bitree t)

}int

main()

for(

int i=

0;i) bitree t;

create

(t,pre,in,n)

;print

(t);

return0;

}

由中序和後序(前序)序列求前序(後序)序列

已知二叉樹的中序和後序 前序 序列可以唯一確定一顆二叉樹,例如,中序序列 1 2 3 4 5 6 後序序列 3 4 2 6 5 1 可以唯一確定一顆二叉樹,如下圖 思路是這樣的 我們知道對於一顆二叉樹,根節點是後序遍歷序列的最後乙個,找到根節點後,我們由中序遍歷的特點知道,中序序列中,根節點 左邊的...

根據先序序列和中序序列求後序序列的迴圈實現

1 include2 include3 include4 include5 6using namespace std 78 設計樹的資料模型 9 start 1011 template class t 12class treeseq public vector13 1819 template cla...

根據先序序列和中序序列求後序序列的遞迴實現

示例 測試位址 1 1 include2 2 include3 3 include445 5using namespace std 66 77 設計樹的資料模型 8 8 start99 1010 template class t 1111 class treeseq public vector12 ...