前序加中序
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 ...