樹轉換為二叉樹(兄弟變為子子孫孫個右孩子)
(1)加線。在所有兄弟結點之間加一條連線。
(2)去線。樹中的每個結點,只保留它與第乙個孩子結點的連線,刪除它與其它孩子結點之間的連線。
(3)層次調整。以樹的根節點為軸心,將整棵樹順時針旋轉一定角度,使之結構層次分明。(注意第乙個孩子是結點的左孩子,兄弟轉換過來的孩子是結點的右孩子)
森林轉換為二叉樹(幾個分家合在一起的過程)
(1)把每棵樹轉換為二叉樹。
(2)第一棵二叉樹不動,從第二棵二叉樹開始,依次把後一棵二叉樹的根結點作為前一棵二叉樹的根結點的右孩子,用線連線起來。
(實際是幾棵樹按輩分合在比自己輩分大一屆的右孩子處。)
二叉樹轉換為樹(子子孫孫個右孩子變為兄弟)
是樹轉換為二叉樹的逆過程。
(1)加線。若某結點x的左孩子結點存在,則將這個左孩子的右孩子結點、左孩子右孩子的右孩子結點、左孩子右孩子的右孩子的右孩子結點…,都作為結點x的孩子。將結點x與這些右孩子結點用線連線起來。
(實際上樹轉化為二叉樹的時候會發現: 1 二叉樹根節點沒有右孩子 2樹的根節點的子節點都一條線的轉化為左孩子的右孩子的右孩子的右孩子.....)
(2)去線。刪除原二叉樹中所有結點與其右孩子結點的連線。
(3)層次調整。
二叉樹轉換為森林(右孩子分家的過程)
假如一棵二叉樹的根節點有右孩子,則這棵二叉樹能夠轉換為森林,否則將轉換為一棵樹。
(1)從根節點開始,若右孩子存在,則把與右孩子結點的連線刪除。再檢視分離後的二叉樹,若其根節點的右孩子存在,則連線刪除…。直到所有這些根節點與右孩子的連線都刪除為止。
(2)將每棵分離後的二叉樹轉換為樹。
(實際是從本家右孩子分出一新本家,然後新本家右孩子分出新本家知道沒有右孩子)
樹和二叉樹 森林 線索二叉樹
1 三叉鍊錶 在二叉鍊錶的基礎上增加了乙個指向雙親的指標域。2 三叉鍊錶的結點資料型別宣告 templatestruct node 3 樹 二叉樹 1.兄弟加線。2.保留雙親與第一孩子連線,刪去與其他孩子的連線。3.順時針轉動,使之層次分明。樹的前序遍歷等價於二叉樹的前序遍歷!樹的後序遍歷等價於二叉...
樹 森林轉二叉樹(資料結構)
樹轉二叉樹 1 加線 在所有兄弟結點之間加一條連線。2 去線 樹中的每個結點,只保留它與第乙個孩子結點的連線,刪除它與其它孩子結點之間的連線。3 層次調整 以樹的根節點為軸心,將整棵樹順時針旋轉一定角度,使之結構層次分明。注意第乙個孩子是結點的左孩子,兄弟轉換過來的孩子是結點的右孩子 森林轉換為二叉...
關於二叉樹的其他演算法以及樹二叉樹森林的轉化
求二叉樹結點的數目 void count binode root 樹中結點的數目等於左子樹結點的數目加上右子樹結點的數目加1 templateint bitree count binode root 葉子節點的數目 增加乙個leafcount的資料成員 templatevoid bitree cou...