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

樹、森林與二叉樹的轉換總結

前言:

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

樹轉換成二叉樹

1.加線:在所有的兄弟結點之間加線 2.去線:對樹中的每一個結點,只保留它與第一個結點的連線,刪除與其他孩子結點之間的連線 3.層次調整:調整成一顆二叉樹(第一個孩子是二叉樹的左孩子,兄弟轉換過來是它的右孩子)

森林轉換成二叉樹

1.轉換:把每一棵樹轉換成二叉樹 2.連線:第一棵二叉樹不變,從第二棵二叉樹開始,依次將後一棵二叉樹的根節點作為前一棵二叉樹根節點的右孩子,用線連起來

二叉樹轉換成樹

就是樹轉換成二叉樹的逆過程 1.加線:若某結點的左孩子結點存在,則將左孩子的n個右孩子結點與此結點連線在一起 2.去線:刪除二叉樹中所有結點與其右孩子之間的連線 3.層次調整
在做這幅圖的時候犯了一個錯誤:當時對比樹轉換成二叉樹圖中的1,你會發現H在右邊 當你把二叉樹轉換成圖的時候你會發現圖中2的H在左邊(當時就納悶為什麼會這樣) 原因:看了幾分鐘發現樹是沒有左右結點的(概念弄混淆了) 樹   的    遍  歷:先根遍歷:ABEFGCHD  後根遍歷:EFGBHCDA 二叉樹的遍歷: 先序遍歷    ABEFGCHD  中序遍歷:EFGBHCDA 結論:當以二叉連結串列作為樹的儲存結構,樹的先根遍歷和後根遍歷完全可以借用二叉樹的前序遍歷和中序遍歷的演算法實現

二叉樹轉換成森林

判斷二叉樹轉換成森林還是樹:二叉樹的根節點是否有右孩子,若有是森林,否則是樹 1.從根節點開始,若有右孩子,則把與右孩子結點的連線刪除,再看分離後的二叉樹,若還有右孩子連線繼續刪除,則到沒有為止 2.將分離的二叉樹轉換成樹
森林的遍歷:    前序遍歷:ABCDEFGHJI  後序遍歷:BCDAFEJHIG 二叉樹的遍歷:前序遍歷:ABCDEFGHJI  中序遍歷:BCDAFEJHIG 結論:當以二叉連結串列作為森林的儲存結構,森林的先序遍歷和後序遍歷完全可以借用二叉樹的前序遍歷和中序遍歷的演算法實現
綜上我們找到了對樹和森林這種複雜問題的簡單解決辦法

相關推薦

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

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

森林的相互轉換

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

森林轉換總結

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

資料結構——森林轉換

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

森林轉換

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

森林相互轉化

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

森林轉換

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

coding A&D:森林轉換

首先,樹轉二叉樹: 「1」兄弟+橫線  樹中的每一個結點,如果該結點有兄弟結點,那麼就在這幾個兄弟結點之間進行連線。 「2」儲存長子線  對於樹中的每一個結點,如果其有多個子節點,儲存其第一個子節點的連線,去除其他子節點的連線。 「3」調整位置  對每個結點

森林轉換

1、森林轉二叉樹      (1)、把每棵樹轉換為二叉樹      (2)、第一棵二叉樹不動,從第二棵二叉樹開始,一次把後一棵二叉樹的根結點作為前一棵二叉樹的根結點的右孩子,用線連線起來。 轉換規則:兄弟相連,長兄為父,孩子靠左。       2、樹轉二叉樹      (1)、加線。在所有的兄弟

森林的互相轉換

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

(0)——的實現的遍歷

0.二叉樹的實現(C++) 未完,待補充 #include <iostream> #include<iostream> #include<queue> #include<stack> using namespace std; //二叉樹結點的

紅黑自平衡AVLB的比較

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

的實現的遍歷

0.二叉樹的實現(C++) 未完,待補充 #include <iostream> #include<iostream> #include<queue> #include<stack> using namespace std;

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

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

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

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

森林相互轉換

節點 png http 所有 相互轉換 層次 二叉樹 根節點 images 1、森林轉二叉樹 (1)、把每棵樹轉換為二叉樹 (2)、第一棵二叉樹不動,從第二棵二叉樹開始,一次把後一棵二叉樹的根結點作為前一棵二叉樹的根結點的右孩子,用線連接起來。

轉換的遍歷

樹和二叉樹不同,可以有0到n個孩子,所以實現起來很麻煩,但我們可以藉助樹的孩子兄弟表示法把樹轉換成二叉樹。 在孩子兄弟表示法中,某個結點的第一個孩子結點的指標是二叉樹中其左孩子結點指標,右兄弟結點指標是二叉樹中右孩子結點指標。 樹轉換為二叉樹過程: (1)樹中所有相同雙親結

3非線性結構--——數據結構【基礎篇】

位置 enter 深度 基礎 表達式 左右 -a 基礎篇 先序遍歷 非線性結構--樹與二叉樹 二叉樹的基礎知識:         二叉樹的特點:             1、每個結點的度<=2             2、二叉樹是有序樹         二叉樹的五種不

c++轉換

此演算法中的樹結構為“左兒子有兄弟連結結構” 在這樣的一個二叉樹中,一個節點的左分支是他的大兒子節點,右分支為他的大兄弟節點。 這裡講的樹有遞迴前根,中根,後根遍歷,插入節點,插入兄弟節點,查詢結點,釋放記憶體這些功能。 重點說一下查詢節點這一演算法: pSTreeNode CTree::Search

5之BB+及R

動態查詢樹主要有:二叉查詢樹(Binary Search Tree),平衡二叉查詢樹(Balanced Binary Search Tree),紅黑樹(Red-Black Tree ),B-tree/B+-tree/ B*-tree (B~Tree)。前三者是典型的二叉查詢樹