圖文速覽——數據結構c語言之——樹、森林與二叉樹的轉換——樹和森林的遍歷

樹、森林轉換成二叉樹

將一棵樹轉換成二叉樹的方法:
將一棵樹轉換成二叉樹實際上就是將這棵樹用孩子兄弟表示法存儲即可,此時,樹中的每個結點最多有兩個指針:一個指針指向第一個孩子(即左孩子),另一個指針指向右側第一個兄弟。當你將這兩個指針看作是二叉樹中的左孩子指針和孩子右指針時,就是一棵二叉樹了。

特點:
一棵樹轉換成二叉樹後,根結點沒有右孩子
將森林轉換成二叉樹的方法與一棵樹轉換成二叉樹的方法類似,只是把森林中所有樹的根結點看作兄弟關係,並對其中的每棵樹依依地進行轉換。

樹轉換爲二叉樹方法:
1)樹中所有相同雙親結點的兄弟結點之間加一條連線
2)對樹中不是雙親結點第一個孩子的結點,只保留新添加的該結點與左兄弟結點之間的連線,刪去該結點與雙親結點之間的連線
3)整理連線,使每個結點的第一個孩子結點位於左孩子位置,右兄弟結點位於右孩子位置
在這裏插入圖片描述
注意: 一棵樹一定可以轉換爲一顆二叉樹,並且轉換後的二叉樹,根結點一定沒有右孩子。

將一個森林轉換爲一顆二叉樹:
e_16,color_FFFFFF,t_70)

將二叉樹還原爲樹:

二叉樹還原爲樹:
1)若某結點是其雙親結點的左孩子,則把該結點的右孩子、右孩子的右孩子…都與該結點的雙親結點用線連接起來
2)刪除原二叉樹中所有雙親結點與右孩子結點的連線
3)整理連線,使每個結點的所有孩子位於相同層次

注意: 不是所有的二叉樹都可以轉換成一顆樹
必須是根結點沒有右子樹的情況下才可以還原成一棵樹。

樹和森林的遍歷:
在這裏插入圖片描述

樹的先根遍歷:先訪問樹的根結點,然後依次先根遍歷根的每棵子樹。
先根:ABEFCGDHI
後根遍歷:先依次後根遍歷每棵子樹,然後訪問根結點。
後根:EFBGCHIDA
當以二叉鏈表作樹的存儲結構時,樹的先根遍歷和後根遍歷可借用二叉樹的先序遍歷和中序遍歷的算法實現。
先序:ABEFCGDHI
中序:EFBGCHIDA

可以看出,樹的先根遍歷序列與後根遍歷序列和樹所對應的二叉樹的先根遍歷序列與中根遍歷序列相同

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