目錄
一、樹的邏輯結構
樹是n個結點的有限集合,n=0時,稱爲空樹。在任意一棵非空樹中應滿足:
1)有且僅有一個特定的稱爲根的結點。
2)當n>1時,其餘結點可分爲m個互不相交的有限集合T1,T2...Tm,其中每個集合本身又是一棵樹,並且稱爲根節點的子樹。
二、樹的先根遍歷
先根遍歷:若樹非空,先訪問根節點,再依次對每棵子樹進行先根遍歷。(深度優先遍歷)
void PreOrder(TreeNode *R){
if(R != NULL){
visit(R);
while(R還有下一個子樹T)
PreOrder(T);
}
}
先根遍歷序列: A B E K F C G D H I J
注:樹的先根遍歷序列與這棵樹相應二叉樹的先序序列相同。
三、樹的後根遍歷
後根遍歷:若樹非空,先依次對每棵子樹進行後根遍歷,最後再訪問根節點。
void PostOrder(TreeNode *R){
if(R != NULL){
while(R還有下一個子樹T)
PostOrder(T);
visit(R);
}
}
後根遍歷序列:K E F B G C H I J D A
注:樹的後根遍歷序列與這棵樹相應二叉樹的中序序列相同。
四、樹的層次遍歷
層次遍歷(用隊列實現)
①若樹非空,則根節點入隊
②若隊列非空,隊頭元素出隊並訪問,同時將該元素的孩子依次入隊
③重複②直到隊列爲空
五、森林的先序遍歷
森林:森林是m棵互不相交的樹的集合。每棵樹去掉根節點後,其各個子樹又組成森林。
先序遍歷森林:
訪問森林中第一棵樹的根節點。
先序遍歷第一棵樹中根節點的子樹森林。
先序遍歷除去第一棵樹之後剩餘的樹構成的森林。
森林先序遍歷序列:B E K L F C G D H M I J
效果等同於依次對各個樹進行先根遍歷
先序遍歷序列:B E K L F C G D H M I J
效果等同於依次對二叉樹的先序遍歷
六、森林的中序遍歷
中序遍歷森林:
中序遍歷森林中第一棵樹的根節點的子樹森林。
訪問第一棵樹的根節點。
中序遍歷除去第一棵樹之後剩餘的樹構成的森林。
森林中序遍歷序列:K L E F B G C M H I J D
效果等同於依次對各個樹進行後根遍歷
中序遍歷序列:K L E F B G C M H I J D
效果等同於依次對二叉樹的中序遍歷