資料結構 樹和森林的遍歷方法

2021-08-09 08:41:39 字數 2139 閱讀 5971

樹的遍歷

1、樹的遍歷的定義:以某種方式訪問樹中的每乙個結點,且僅訪問一次。 樹的遍歷主要有先根遍歷和後根遍歷。

2、(1)先根遍歷:若樹非空,則先訪問根結點,再按照從左到右的順序遍歷根結點的每一棵子樹。這個訪問順序與這棵樹對應的二叉樹的先序遍歷順序相同。

(2)後根遍歷:若樹非空,則按照從左到右的順序遍歷根結點的每一棵子樹,之後再訪問根結點。其訪問順序與這棵樹對應的二叉樹的中序遍歷順序相同。

根據以上這幅圖有如下結果:

樹的先根遍歷:a-b-e-f-g-c-h-d-i-j

對應的二叉樹的先序遍歷:a-b-e-f-g-c-h-d-i-j。由此可知二者是一致的。

樹的後根遍歷:e-f-g-b-h-c-i-j-d-a

對應的二叉樹的後序遍歷:g-f-e-h-j-i-d-c-b-a

對應的二叉樹的中序遍歷:e-f-g-b-h-c-i-j-d-a(與樹的後根遍歷相一致)

注意到我們並沒有定義一般樹的中根遍歷,因為子結點該怎麼分兩部分並沒有定義,所以只定義先、後根。

⑴ 先序遍歷:先訪問根結點,然後依次先序遍歷完每棵子樹。如圖的樹,先序遍歷的次序是:

abcdefgijhk

⑵ 後序遍歷:先依次後序遍歷完每棵子樹,然後訪問根結點。如圖的樹,後序遍歷的次序是:

cdbfijgheka

森林的遍歷

1.前序遍歷

前序遍歷的定義為:

(1)訪問森林中第一棵樹的根結點;

(2)前序遍歷第一棵樹的根結點的子樹;

(3)前序遍歷去掉第一棵樹後的子森林。

2.中序遍歷

中序遍歷的定義為:

(1)中序遍歷第一棵樹的根結點的子樹;

(2)訪問森林中第一棵樹的根結點;

(3)中序遍歷去掉第一棵樹後的子森林。

由上圖看看這個森林和二叉樹的各種遍歷如下:

森林的先根遍歷:a-b-c-d-e-f-g-h-j-i

二叉樹森林的先序遍歷:a-b-c-d-e-f-g-h-j-i(相同)

完整二叉樹的先序遍歷:a-b-c-d-e-f-g-h-j-i (相同)

森林的後根遍歷:b-c-d-a-f-e-j-h-i-g

二叉樹森林的後序遍歷:d-c-b-a-f-e-j-i-h-g

完整二叉樹的後序遍歷:d-c-b-f-j-i-h-g-e-a(不同於二叉樹森林的後序遍歷)

二叉樹森林的中序遍歷:b-c-d-a-f-e-j-h-i-g(與森林的後根遍歷相同)

完整二叉樹的中序遍歷:b-c-d-a-f-e-j-h-i-g(與森林的後根遍歷相同,自然也與二叉樹森林的中序遍歷相同)

結論:

◆ 根據森林與二叉樹的轉換關係以及森林和二叉樹的遍歷定義可以推知,森林的前序遍歷和中序遍歷與所轉換的二叉樹的先序遍歷和中序遍歷的結果序列相同。

◆ 樹的先序遍歷實質上與將樹轉換成二叉樹後對二叉樹的先序遍歷相同。

◆ 樹的後序遍歷實質上與將樹轉換成二叉樹後對二叉樹的中序遍歷相同。

森林與二叉樹的轉換

樹轉化為二叉樹:

⑴ 加虛線(或者粗實線)。在樹的每層按從「左至右」的順序在兄弟結點之間加虛線相連。

⑵ 去連線。除最左的第乙個子結點(長子節點)外,父結點與所有其它子結點的連線都去掉。

森林轉換成二叉樹 :

當一般的樹轉換成二叉樹後,二叉樹的右子樹必為空。若把森林中的第二棵樹(轉換成二叉樹後)的根結點作為第一棵樹(二叉樹)的根結點的兄弟結點,則可匯出森林轉換成二叉樹的轉換步驟如下:

(1)、把每棵樹轉換為二叉樹

(2)、按給出的森林中樹的次序,第一棵樹不動,從第二棵樹開始,依次把後一棵樹的根結點作為前一棵二叉樹的根結點的右孩子,用線連起來,當所有的二叉樹連線起來後,就得到了由森林轉換來的二叉樹。

資料結構與演算法 樹和森林

樹的儲存結構 1.雙親表示法 結點結構 typedef struct ptnodeptnode 樹結構 define max tree size 100 typedef struct ptree 2.孩子鍊錶 找孩子容易,找雙親難 孩子結點結構 typedef struct ctnode child...

樹和森林的遍歷

樹的遍歷 設樹t如下圖所示,結點r是根,根的子樹從左到右依次為t1,t2,tk。1 樹t的前序遍歷定義 若樹t非空,則 訪問根結點r 依次前序遍歷根r的各子樹t1,t2,tk。2 樹的後序遍歷定義 若樹t非空,則 依次後序遍歷根t的各子樹tl,t2,tk 訪問根結點r。例 對下面的 a 圖中的樹進行...

樹和森林的遍歷

一 樹的遍歷 樹的結構是乙個根加上森林,而森林又是樹的集合,由此我們可以引出樹的兩種遍歷方式 這兩種遍歷方式本身也是一種遞迴定義 1 先根 先序 遍歷 即先訪問樹的根結點,然後依次先根遍歷根的每棵子樹 2 後根 後序 遍歷 即先依次後根遍歷根的每棵子樹,然後訪問根結點 3 另外還有一種層序遍歷,這種...