度:結點擁有的子樹數就稱為結點的度。度為0的結點稱為葉子結點或終端結點。度不為0的結點稱為非終端結點或分支結點。樹的度為樹內各結點度的最大值。
樹的層次:結點的層次從根開始定義起,根為第一層,根的孩子為第二層。若某結點在第l層,則其子樹的根就在l+1層。
樹的高度:樹中結點的最大層次稱為樹的深度或高度。
概念:
二叉樹是n個結點的有限集合,該集合或為空集(空二叉樹),或者由乙個根結點和兩棵互不相交的,分別稱為根結點的左子樹和右子樹的二叉樹組成。
特點:
1)每個結點最多有兩棵子樹。所以二叉樹中不存在度大於2的結點。
2)左子樹和右子樹是有順序的,次序不能顛倒。
3)即使樹中某結點只有一顆子樹,也要區分它是左子樹還是右子樹。
4)二叉樹有5種基本形態:空樹,只有乙個根結點,根結點只有左子樹,根結點只有右子樹,根結點既有左子樹也有右子樹。
滿二叉樹:
在一棵二叉樹中,如果所有分支結點都存在左子樹和右子樹,並且所有葉子結點都在同一層上,這樣的二叉樹稱為滿二叉樹。如下圖:
特點:1)葉子結點只能出現在最下一層。
2)非葉子結點的度一定為2。
3)在同樣深度的二叉樹中,滿二叉樹的結點個數最多,葉子數最多。
完全二叉樹:
對一棵具有n個結點的二叉樹按層序編號,如果編號為i(1<=i<=n)的結點與同樣深度的滿二叉樹中編號為i的結點在二叉樹中位置完全相同,則這棵二叉樹稱為完全二叉樹。如下圖:
特點:1)葉子結點只能出現在最下兩層。
2)最下層葉子一定集中在左部連續位置。
3)倒數二層,若有葉子結點,一定都在右部連續位置。
4)如果結點度為1,則該結點只有左孩子,不存在只有右子樹的情況。
5)同樣結點的二叉樹,完全二叉樹深度最小。
二叉樹的性質:
性質1:在二叉樹的第i層上至多有2i
−1個節點。(i≥=
1 )。
性質2:深度為k的二叉樹至多有2k
−1個節點。(k≥=
1 )
性質3:對任何一棵二叉樹t,如果其終端節點樹為n0
,度為2的結點數為n2
,則n0
=n2 +1。
性質4:具有n個結點的完全二叉樹的深度為⌊l
og2n
+1⌋ ,⌊x
⌋ 表示不大於x的最大整數。
性質5:如果對一棵有n個結點的完全二叉樹(其深度為⌊l
og2n
+1⌋ )的結點按層編號(從第一層到第⌊l
og2n
+1⌋ 層,每層從左到右),對任一結點i(1≤
i≤n )有:
1)如果i=1,則結點i是二叉樹的根,無雙親;如果i>1,則其雙親是結點⌊i
/2⌋ 。
2)如果2i>n,則結點i無左孩子(結點i為葉子結點);否則其左孩子是結點2i。
3)如果2i+1>n,則結點i無右孩子;否則右孩子是結點2i+1。
如下圖二叉樹中:
對於第一條來說,i=1就是二叉樹的根結點,i>1時,如i=3,其雙親節點為⌊3
/2⌋ =1。
對於第二條,如結點6,2*6=12>n=10,所以結點6沒有左孩子。而對於結點5, 2*5=10<=n,所以結點5的左孩子為結點10。
對於第三條,如結點5,2*5+1=11>n,所以結點5沒有右孩子,而結點3,2*3+1=7<10,所以其右孩子為結點7。
赫夫曼樹:
路徑長度:從樹中乙個結點到另乙個結點之間的分支構成這兩個結點之間的路徑,路徑上的分支數目稱為路徑長度。
樹的路徑長度:樹的路徑長度是從樹根到每乙個結點的路徑長度之和。
如下面的二叉樹中:
根節點到結點d的路徑長度為2,而其樹的路徑長度為1+1+2+2+3+3+2+2=16。
而如果考慮帶權結點,則結點帶權的路徑長度為從該結點到樹根之間的路徑長度與結點上權的乘積。
樹的帶權路徑長度為樹中所有葉子結點的帶權路徑長度之和。
如上面的二叉樹中,結點d的帶權路徑長度為2*30=60,而樹的帶權路徑長度為3*5+3*15+2*40+2*30+2*10=220。
赫夫曼樹:假設有n個權值,構造一棵有n個葉子結點的二叉樹,每個葉子結點帶權wk
,則其中帶權路徑長度wpl最小的二叉樹稱為最優二叉樹或赫夫曼樹。
構造赫夫曼樹的演算法如下:
1)根據給定的n個權值構成n棵二叉樹的集合f=,其中每棵二叉樹ti
只有乙個帶權的wi
根節點,其左右子樹均為空。
2)在f中選取兩棵根節點的權值最小的樹作為左右子樹構造一棵新的二叉樹,且新的二叉樹的根結點的權值為其左右子樹上根結點的權值之和。
3)在f中刪除這兩棵樹,同時將新得到的二叉樹加入f中。
4)重複2和3,直到f只含一棵樹為止。這棵樹就是赫夫曼樹。
如上面的二叉樹按該演算法構造成赫夫曼樹如下:
赫夫曼編碼:
設需要編碼的字符集為,各個字元在電文出現的次數或頻率集合為,以d1
,d2,
d3..
..,d
n 作為葉子結點,以w1
,w2,
w3..
..,w
n 作為相應葉子結點的權值來構造一棵赫夫曼樹。規定赫夫曼樹的左分支代表0,右分支代表1,則從根結點到葉子結點所經過的路徑分支組成的0和1的序列便為該結點對應字元的編碼。也就是赫夫曼編碼。如下圖的轉換:
資料結構回顧 排序
要求 掌握演算法思想,效能分析,實現 注 本文預設遞增排序 一,排序的基本概念 1,什麼是排序 將乙個沒有順序的數列進行重新排列是它成為乙個遞增 遞減 序列 2,穩定性 如果數列中有兩個元素的值是相等的,排序後他們的相對位置沒有發生改變,就認為該排序演算法穩定。3,內部排序 指排序期間元素全部存放在...
資料結構 回顧二叉樹
1.為什麼會有樹?因為當有大量的輸入資料時,鍊錶的線性訪問時間就顯得略長了。而樹結構,其大部分操作的執行時間平均為o logn 2.樹的實現並不難,幾行 就搞定了。struct treenode 3.遍歷形式 中序遍歷二叉樹 void inorder tree pointer ptr 前序遍歷二叉樹...
資料結構(十七)赫夫曼樹 樹總結回顧
赫夫曼樹定義與原理 路徑長度 從樹中乙個結點到另乙個結點之間的分支構成兩個節點之間的路徑,路徑上的分支數目 樹的路徑長度 從樹根到每一結點的路徑長度之和 赫夫曼樹 帶權路徑長度wpl最小的二叉樹 赫夫曼編碼 目的 解決遠距離通訊的資料傳輸的最優化問題 隨著字元的增加和多字元權重的不同,壓縮會更加顯出...