#include
#include
using namespace std;
typedef
struct node
btnode;
//最好先在稿紙上寫出a0...ak,ak+1...an-1的序列,找到左右子樹的起點和終點
void
create
(btnode *
&t,char
*pre,
char
*in,
int n)
//n為該樹的結點數 (思想為分治)
else
}create
(t->lchild, pre+
1, in, k)
;//該樹的左子樹對應的先序序列以pre+1為根結點,中序序列從in開始,有k個結點。
create
(t->rchild, pre+k+
1, in+k+
1, n-k-1)
;//該樹的右子樹對應的先序序列以pre+k+1為根結點,中序序列從p+1開始,含n-k-1個結點。 }}
void
pre(btnode *t)
intmain()
//dgbaecf
//gdbefca
#include
#include
using namespace std;
typedef
struct node
btnode;
void
create
(btnode *
&t,char
*pos,
char
*in,
int n)
else
}create
(t->lchild, pos, in, k)
;create
(t->rchild, pos+k, in+k+
1, n-k-1)
;}}void
pre(btnode *t)
}int
main()
二叉樹 根據二叉樹遍歷序列構造二叉樹
二叉樹的節點型別宣告如下 struct btnode 定理1任何 n 0 個不同節點的二叉樹,都可由它的前序序列和中序序列唯一地確定。根據前序遍歷的特點,知前序序列 presequence 的首個元素 presequence 0 為二叉樹的根 root 然後在中序序列 insequence 中查詢此...
二叉樹 根據遍歷構造二叉樹
二叉樹中的三種遍歷方式,是我們最為熟知的,通過先序遍歷 中序遍歷或者是中序遍歷 後序遍歷都可以唯一確定一棵二叉樹 但是注意,先序遍歷 後序遍歷不能確定一棵二叉樹,但是如果一棵二叉樹中只有度為0和度為2的節點,那麼這種遍歷方式也是可以確定一棵確定的二叉樹的。先序 中序 構造二叉樹 下面我們分別來看一下...
重建二叉樹 根據先序序列與中序序列,重建二叉樹
假設已知先序序列為pre1 pre2 pren,中序序列為in1 in2 inn,如圖所示 解題思路 根據先序序列和中序序列找到根節點,根據根節點劃分左子樹和右子樹的數目,然後再次遞迴進行建立左子樹與右子樹的結點。不管是左子樹還是右子樹都遵循遍歷的原則 實現 先序序列區間wie prel,prer ...