數據結構--樹--總結

                              數據結構——樹算法

定義:樹是一個n(n>=0)個結點的有序合集數據結構

 

名詞理解:編碼

結點:指樹中的一個元素;.net

結點的度:指結點擁有的子樹的個數,二叉樹的度不大於2;3d

數的度:指樹中的最大結點度數;指針

葉子:度爲0的結點,也稱爲終端結點;blog

高度:葉子節點的高度爲1,根節點高度最高;排序

層:根在第一層,以此類推;遞歸

 

二叉樹的定義:由一個結點和兩顆互不相交、分別稱爲這個根的左子樹和右子樹的二叉樹構成(遞歸定義)隊列

 

二叉樹的性質:

1:二叉樹的第i層上至多有2^(i-1)個結點

2:深度爲k的二叉樹,至多有2^k-1個結點

 

滿二叉樹:葉子節點必定要在最後一層,而且全部非葉子節點都存在左孩子和右孩子;

最特別的二叉樹:徹底二叉樹:從左到右、從上到下構建的二叉樹;

 

徹底二叉樹的性質:

1:結點 i 的子結點爲2*i 和 2*i+1(前提是都小於總結點數)

2:結點 i 的父結點爲 i/2 

 

二叉樹的遍歷(要有遞歸的思想!!!):

1:先序遍歷:根->左子樹->右子樹(先序)

2:中序遍歷:左子樹->根->右子樹(中序)

3:後序遍歷:左子樹->右子樹->根(後序)

 

這三種遍歷方法只是訪問結點的時機不一樣,訪問結點的路徑都是同樣的,時間和空間複雜度皆爲O(n)

二叉樹的存儲結構:

1:順序存儲(只適用於徹底二叉樹)——能夠用於排序算法中的堆排序

 

2:鏈式存儲(最廣泛的存儲方式)——因爲結點可能爲空,因此會比較浪費空間

若是有n個節點,則有2n個left、right指針,可是用到的只有n-1個指針

 

3:線索存儲(改進的方法)

關於霍夫曼編碼(Huffman編碼):

      Huffman是一種前綴編碼;Huffman編碼是創建在Huffman樹的基礎上進行的,所以爲了進行Huffman編碼,必須先構建Huffman樹;樹的路徑長度是每一個葉節點到根節點的路徑之和;帶權路徑長度是(每一個葉節點的路徑長度*wi)之和;Huffman樹是最小帶權路徑長度的二叉樹;

構造Huffman樹的過程:
(1)將各個節點按照權重從小到大排序;
(2)取最小權重的兩個節點,並新建一個父節點做爲這兩個節點的雙親,雙親節點的權重爲子節點權重之和,再將此父節點放入原來的隊列;
(3)重複(2)的步驟,直到隊列中只有一個節點,此節點爲根節點;

構造完Huffman樹以後,就能夠進行Huffman編碼了,編碼規則:左分支填0,右分支填1;

Huffman解碼過程:給定一個01串,將01串進行Huffman樹,到葉子節點了就代表已經解碼一個節點,而後再次遍歷Huffman樹;

 

 

相關文章
相關標籤/搜索