數據結構--樹--總結


                              數據結構——樹

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

 

名詞理解:

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

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

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

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

高度:葉子節點的高度為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樹;

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM