1. 程式人生 > >樹、森林和二叉樹的轉換

樹、森林和二叉樹的轉換

樹轉換為二叉樹

(1)加線。在所有兄弟結點之間加一條連線。

(2)去線。樹中的每個結點,只保留它與第一個孩子結點的連線,刪除它與其它孩子結點之間的連線。

(3)層次調整。以樹的根節點為軸心,將整棵樹順時針旋轉一定角度,使之結構層次分明。(注意第一個孩子是結點的左孩子,兄弟轉換過來的孩子是結點的右孩子)

森林轉換為二叉樹

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

(2)第一棵二叉樹不動,從第二棵二叉樹開始,依次把後一棵二叉樹的根結點作為前一棵二叉樹的根結點的右孩子,用線連線起來。

二叉樹轉換為樹

是樹轉換為二叉樹的逆過程。

(1)加線。若某結點X的左孩子結點存在,則將這個左孩子的右孩子結點、右孩子的右孩子結點、右孩子的右孩子的右孩子結點…,都作為結點X的孩子。將結點X與這些右孩子結點用線連線起來。

(2)去線。刪除原二叉樹中所有結點與其右孩子結點的連線。

(3)層次調整。

二叉樹轉換為森林

假如一棵二叉樹的根節點有右孩子,則這棵二叉樹能夠轉換為森林,否則將轉換為一棵樹。

(1)從根節點開始,若右孩子存在,則把與右孩子結點的連線刪除。再檢視分離後的二叉樹,若其根節點的右孩子存在,則連線刪除…。直到所有這些根節點與右孩子的連線都刪除為止。

(2)將每棵分離後的二叉樹轉換為樹。

相關推薦

森林轉換

樹轉換為二叉樹 (1)加線。在所有兄弟結點之間加一條連線。 (2)去線。樹中的每個結點,只保留它與第一個孩子結點的連線,刪除它與其它孩子結點之間的連線。 (3)層次調整。以樹的根節點為軸心,將整棵樹順時針旋轉一定角度,使之結構層次分明。(注意第一個孩子是結點的左孩子

資料結構與演算法12-森林轉換

樹和森林的二叉樹轉換 對於樹來說,在滿足樹的條件下可以是任意開頭,一個結點可以有任意多個孩子,顯然對樹的處理要複雜得多,去研究關於樹的性質和演算法,真的不容易。有沒有簡單的方法來處理樹呢?當然有啦~ 前面我們提到過的樹的孩子兄弟法可以將一棵樹用二叉連結串列進行儲存,所以藉助二叉連結串列,樹和

森林的相互轉換

eight inf http 轉換 alt 森林 技術分享 分享 相互 樹、森林與二叉樹的相互轉換

森林轉換總結

前言:   在樹這一塊的資料結構中最重要的就是二叉樹,但是對於我們大部分人來說二叉樹的基礎掌握還是ok的,但是有時候我們也會忽略了樹於森林(本人就是忽略了),今天就在這裡總結總結數、森林與二叉樹的轉換

資料結構——森林轉換

在介紹樹的儲存結構時,就說到了樹的孩子兄弟表示法可以將一棵樹用二叉連結串列進行儲存,所以藉助二叉連結串列,樹和二叉樹可以互相轉換。從物理結構上來看,它們的二叉連結串列也是相同的,只是介紹不太一樣而已。因此,只要我們設定一定的規則,用二叉樹來表示樹,甚至表示森林都

森林轉換

由於二叉樹和樹都可以用二叉連結串列作為儲存結構,則以二叉連結串列作為媒介可以匯出樹與二叉樹的一個對應關係,即給定一棵樹,可以找到唯一的一顆二叉樹與之對應。從物理結構上看,樹的孩子兄弟表示法語二叉樹的二叉連結串列表示法相同,即每個結點共有兩個指標,分別指向結點

森林相互轉化

1、樹轉換為二叉樹由於二叉樹是有序的,為了避免混淆,對於無序樹,我們約定樹中的每個結點的孩子結點按從左到右的順序進行編號。將樹轉換成二叉樹的步驟是:(1)加線。就是在所有兄弟結點之間加一條連線;(2)抹線。就是對樹中的每個結點,只保留他與第一個孩子結點之間的連線,刪除它與其它孩子結點之間的連線;(3)旋轉。就

森林轉換

       樹是一種資料結構,而二叉樹是樹的最重要的一種。所有的樹都可以找到一棵為一對應的二叉樹。而從物理儲存結構來說,它們的二叉連結串列是相同的,只是解釋的角度不同。        一、森林轉換為樹        如果F={T1,T2,...,Tn}是森林,按如下的規則轉

轉換森林的轉化

樹具有二叉連結串列的形式,可以將其他形式的樹轉化為二叉連結串列的形式。並且森林合併樹也是基於二叉連結串列形式的樹進行合併的。下面給出程式碼: /** * @Title: CTree.java * @Package tree * @Description

資料結構學習筆記-森林的轉化最優

int min(HuffmanTree &HT,int i) { int k = MAX; int j,flag = 0; for(j=1;j<=i;++j) { if(HT[j].weights2) { change = s1; s1 = s2; s2 = chang

森林的互相轉換

 1.樹、森林到二叉樹的轉換 (1)將樹轉換為二叉樹      樹中每個結點最多隻有一個最左邊的孩子(長子)和一個右鄰的兄弟。按照這種關係很自然地就能將樹轉換成相應的二叉樹:   ①在所有兄弟結點之間加一連線;   ②對每個結點,除了保留與其長子的連線外,去掉該結點與其它孩子的連線。 【例】下面(a)圖所

紅黑自平衡AVLB的比較

1. 紅黑樹和自平衡二叉(查詢)樹區別 紅黑樹放棄了追求完全平衡,追求大致平衡,在與平衡二叉樹的時間複雜度相差不大的情況下,保證每次插入最多隻需要三次旋轉就能達到平衡,實現起來也更為簡單。 平衡二叉樹追求絕對平衡,條件比較苛刻,實現起來比較麻煩,每次插入新節點之後需要旋轉的

資料結構中常見的(BST搜尋AVL平衡RBT紅黑B-B+B*

BST樹 即二叉搜尋樹:        1.所有非葉子結點至多擁有兩個兒子(Left和Right);        2.所有結點儲存一個關鍵字;        3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹; 如:      

滿完全最優(赫夫曼排序判定

二叉排序樹(Binary Sort Tree)又稱二叉查詢樹。 它或者是一棵空樹;或者是具有下列性質的二叉樹: (1)若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; (2)若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; (3)左、右子樹也分別為二叉排序樹;

資料結構——第三章:03森林

1.樹的三種儲存結構: (1)雙親表示法: #define MAX_TREE_SIZE 100 結點結構: typedef struct PTNode {   Elem data;   int parent; //雙親位置域 } PTNode; (2)孩子雙親連結串列表示法: &nbs

第六章--森林-計算機17級 7-2 家譜處理 (30 分)

7-2 家譜處理 (30 分) 人類學研究對於家族很感興趣,於是研究人員蒐集了一些家族的家譜進行研究。實驗中,使用計算機處理家譜。為了實現這個目的,研究人員將家譜轉換為文字檔案。下面為家譜文字檔案的例項: John Robert Frank And

第六章--森林-計算機17級

解析在後面,有問題的話歡迎各位大佬指正:   答案解析: 提示:不會做就畫圖,原理雖然不理解但答案基本都能出來 p1-1: x2-1: x2-2:同b1-1 x2-3:這個其實你只要會了森林轉換成二叉樹的方法畫個圖自

第六章--森林-計算機17級 7-1 的同構 (25 分)(答案超詳解)

7-1 樹的同構 (25 分) 給定兩棵樹T1和T2。如果T1可以通過若干次左右孩子互換就變成T2,則我們稱兩棵樹是“同構”的。例如圖1給出的兩棵樹就是同構的,因為我們把其中一棵樹的結點A、B、G的左右孩子互換後,就得到另外一棵樹。而圖2就不是同構的。  

資料結構實驗-C語言-二叉樹的建立,前後序遍歷的遞迴演算法非遞迴演算法,求葉子結點數目,求二叉樹深度,判斷二叉樹是否相似,求二叉樹左右子互換,二叉樹層序遍歷的演算法,判斷二叉樹是否是完全二叉樹

1.實驗目的 熟練掌握二叉樹的二叉連結串列儲存結構的C語言實現。掌握二叉樹的基本操作-前序、中序、後序遍歷二叉樹的三種方法。瞭解非遞迴遍歷過程中“棧”的作用和狀態,而且能靈活運用遍歷演算法實現二叉樹的其它操作。 2.實驗內容 (1)二叉樹的二叉連結串列的建立 (2)二叉樹的前、中、後

4

1、樹和二叉樹的一些基本知識點 1.1、樹 一種非線性結構。樹是遞迴結構,在樹的定義中又用到了樹的概念。 1.1.1、樹的基本術語: 樹結點:包含一個數據元素及若干指向子樹的分支; 孩子結點:結點的子樹的根稱為該結點的孩子; 雙親結