1. 程式人生 > >樹與二叉樹的轉換、樹的遍歷

樹與二叉樹的轉換、樹的遍歷

樹和二叉樹不同,可以有0到n個孩子,所以實現起來很麻煩,但我們可以藉助樹的孩子兄弟表示法把樹轉換成二叉樹。

在孩子兄弟表示法中,某個結點的第一個孩子結點的指標是二叉樹中其左孩子結點指標,右兄弟結點指標是二叉樹中右孩子結點指標。

樹轉換為二叉樹過程:

(1)樹中所有相同雙親結點的兄弟結點之間加一條連線;

(2)對樹中不是雙親結點的第一個孩子的結點,只保留新新增的該結點與左兄弟結點之間的連線,刪去該結點與雙親結點之間的連線;

(3)整理所有保留的連線,根據連線擺放成二叉樹的結構,轉換完成。


二叉樹還原為樹過程:

(1)若某結點是其雙親結點的左孩子,則把該結點的右孩子,右孩子的右孩子······都與該結點的雙親結點用線連起來;

(2)刪除原二叉樹中所有雙親結點與右孩子結點的連線;

(3)整理所有保留的連線,根據連線擺放成樹的結構,轉換完成。


樹的遍歷:

主要有先根遍歷和後根遍歷兩種,先根遍歷序列一定和該樹轉換的二叉樹的前序遍歷序列相同;後根遍歷序列一定和該樹轉換的二叉樹的中序遍歷序列相同。

先根遍歷過程:

(1)訪問根結點;

(2)按照從左到右的次序先根遍歷根結點的每一棵樹。

後根遍歷過程:

(1)按照從左到右的次序後根遍歷根結點的每一棵子樹;

(2)訪問根結點。


圖中先根遍歷序列為:ABEJFCGKLDHI後根遍歷序列為:JEFBKLGCHIDA