給定一棵樹,可以找到唯一一棵二叉樹與之對應,同樣,森林也與一棵樹存在一一對應關係。樹與二叉樹,森林與二叉樹的轉化如下圖所示,(a)(b)(c)為三棵樹,並構成乙個森林,(d)(e)(f)分別為(a)(b)(c)對應的二叉樹,(g)為森林對應的二叉樹。這裡不再詳細介紹轉化方法。
下面首先說一說樹的遍歷方法,及與其對應二叉樹的遍歷方法的關係。
樹結構有兩種次序遍歷樹的方法:
1.先根遍歷:先訪問樹的根節點,再依次先根遍歷子樹;
2.後根遍歷:先依次後根遍歷子樹,再訪問樹的根節點。
不曾看到過樹的
『中根遍歷
』的概念,因為樹並不一定是二叉樹,『中
』的概念不好定義,比如對於乙個擁有
3個子樹的根節點來說,根節點除了先根和後根兩種遍歷方式之外還有另外兩種次序,如一種次序是先遍歷根節點的第一棵子樹,再訪問根節點,之後再依次遍歷剩餘子樹,另一種次序是,先遍歷根節點的前兩棵子樹,再訪問根節點,最後訪問第三棵子樹。對於擁有更多子樹的根節點來說,依次遍歷的方法更多。
樹的先根遍歷和後根遍歷可分別借用對應二叉樹的先序遍歷和中序遍歷實現。
以上圖(
a)中的樹和其對應的(
d)中的二叉樹為例:
對樹進行先根遍歷:
a b c d
對樹進行後根遍歷:
b c d a
對二叉樹進行先序遍歷:
a b c d
(與樹的先根遍歷一致)
對二叉樹進行中序遍歷:
b c d a
(同樹的後根遍歷)
接下來說一說森林的遍歷方法,及與其對應的二叉樹的遍歷方法的關係。
森林的兩種遍歷方法:
1.先序遍歷森林:(1
)訪問森林中第一棵樹的根節點;(2
)先序遍歷第一棵樹中根節點的子樹森林;(3)
先序遍歷除去第一棵樹之後剩餘的樹構成的森林。
2.中序遍歷森林 (
1)中序遍歷森林中第一棵樹的根節點的子樹森林; (
2)訪問第一棵樹的根節點; (
3)中序遍歷除去第一棵樹之後剩餘的樹構成的森林。
在森林的中序遍歷方法中需要
注意
,森林的中序遍歷與二叉樹的中序遍歷方法的定義不同,二叉樹的中序遍歷是按照
ldr的順序進行遍歷,而森林的中序遍歷是要先中序遍歷第一棵樹的所有子樹,再訪問這棵樹的根節點,對於這棵樹來說,根節點的訪問次序其實是整棵樹遍歷的最後(類似於二叉樹的後序),這裡經常與二叉樹的中序遍歷混淆,傻傻分不清楚
~ 下面,看看森林遍歷方法和其對應的二叉樹遍歷方法的對應關係。當森林轉換成二叉樹時,其第一棵樹的子樹森林轉換成左子樹,剩餘樹的森林轉換成右子樹,則森林的先序和中序遍歷即對應二叉樹的先序和中序遍歷。以上圖中(a)(
b)(c)構成的森林和對應的二叉樹(
g)為例:
對森林進行先序遍歷:
a b c d e f g h i j
對森林進行中序遍歷:
b c d a f e h j i g
對二叉樹進行先序遍歷:
a b c d e f g h i j
(與森林先序遍歷一致)
對二叉樹進行中序遍歷:b c d a f e h j i g
(同森林中序遍歷)
樹 森林與二叉樹的轉換以及樹和森林的遍歷
一 關於樹,二叉樹,森林的概念和區別可參考 1 2 二 樹轉換為二叉樹 由於二叉樹是有序的,為了避免混淆,對於無序樹,我們約定樹中的每個結點的孩子結點按從左到右的順序進行編號。將樹轉換成二叉樹的步驟是 1 加線。就是在所有兄弟結點之間加一條連線 2 抹線。就是對樹中的每個結點,只保留他與第乙個孩子結...
樹 森林 二叉樹的轉換
樹 森林與二叉樹的轉換 樹或森林與二叉樹之間有乙個自然的一一對應關係。任何乙個森林或一棵樹可惟一地對應到一棵二叉樹 反之,任何一棵二叉樹也能惟一地對應到乙個森林或一棵樹。1 樹 森林到二叉樹的轉換 1 將樹轉換為二叉樹 樹中每個結點最多只有乙個最左邊的孩子 長子 和乙個右鄰的兄弟。按照這種關係很自然...
樹 森林 二叉樹的轉換
樹變二叉樹 樹變二叉樹的規則 每個結點的左指標指向它的第乙個孩子結點。右指標指向它在樹中的相鄰兄弟結點。也即 左孩子右兄弟。根沒有兄弟,所以轉換以後的樹沒有右子樹。具體操作 二叉樹變樹 二叉樹變樹的規則 是樹變二叉樹的逆過程。問 二叉樹可以變成各種各樣的樹,為何這裡只是唯一一種樹形?這裡只是假設這個...