數據結構筆記——樹、森林的遍歷

目錄

一、樹的邏輯結構

二、樹的先根遍歷

三、樹的後根遍歷

四、樹的層次遍歷

五、森林的先序遍歷

六、森林的中序遍歷

七、總結

一、樹的邏輯結構

樹是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

效果等同於依次對二叉樹的中序遍歷

七、總結

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章