科大C語言筆記 2

2022-07-21 13:12:11 字數 1419 閱讀 7993

最優二叉樹,也稱哈夫曼(haffman)樹,是指對於一組帶有確定權值的葉結點,構造的具有最小帶權路徑長度的二叉樹

給出4 個葉結點,設其權值分別為1,3,5,7,我們可以構造出形狀不同的多個二叉樹。這些形狀不同的二叉樹的帶權路徑長度將各不相同。

這五棵樹的帶權路徑長度分別為:

(a)wpl=1×2+3×2+5×2+7×2=32

(b)wpl=1×3+3×3+5×2+7×1=29  //根節點開始,從0到葉節點經歷了幾就乘幾,再求和

(c)wpl=1×2+3×3+5×3+7×1=33

(d)wpl=7×3+5×3+3×2+1×1=43 

(e)wpl=7×1+5×2+3×3+1×3=29

下圖:給出了前面提到的葉結點權值集合為w=的哈夫曼樹的構造過程。可以計算出其帶權路徑長度為29,由此可見,對於同一組給定葉結點所構造的哈夫曼樹,樹的形狀可能不同,但帶權路徑長度值是相同的,一定是最小的。

二叉樹的相關概念

(1)結點的度。結點所擁有的子樹的個數稱為該結點的度。

(2)葉結點。度為0 的結點稱為葉結點,或者稱為終端結點。

(3)分枝結點。度不為0 的結點稱為分支結點,或者稱為非終端結點。一棵樹的結點除葉結點外,其餘的都是分支結點。

(4)左孩子、右孩子、雙親。樹中乙個結點的子樹的根結點稱為這個結點的孩子。這個結點稱為它孩子結點的雙親。具有同乙個雙親的孩子結點互稱為兄弟。

(5)路徑、路徑長度。如果一棵樹的一串結點n1,n2,…,nk 有如下關係:結點ni 是ni+1的父結點(1≤i都存在左子樹和右子樹,並且所有葉子結點都在同一層上,這樣的一棵二叉樹稱作滿二叉樹。

(a)圖就是一棵滿二叉樹,(b)圖則不是滿二叉樹,因為,雖然其所有結點要麼是含有左右子樹的分支結點,要麼是葉子結點,但由於其葉子未在同一層上,故不是滿二叉樹。

完全二叉樹。

一棵深度為k 的有n 個結點的二叉樹,對樹中的結點按從上至下、從左到右的順序進行編號,如果編號為i(1≤i≤n)的結點與滿二叉樹中編號為i 的結點在二叉樹中的位置相同,則這棵二叉樹稱為完全二叉樹。完全二叉樹的特點是:葉子結點只能出現在最下層和次下層,且最下層的葉子結點集中在樹的左部。顯然,一棵滿二叉樹必定是一棵完全二叉樹,而完全二叉樹未必是滿二叉樹。如圖6.3 所示(a)為一棵完全二叉樹,(b)和圖6.2(b)都不是完全二叉樹。

所謂二叉樹的鏈式儲存結構是指,用鍊錶來表示一棵二叉樹,即用鏈來指示著元素的邏輯關係。通常有下面兩種形式。

(1)二叉鍊錶儲存

鍊錶中每個結點由三個域組成,除了資料域外,還有兩個指標域,分別用來給出該結點左孩子和右孩子所在的鏈結點的儲存位址。結點的儲存的結構為:

其中,data 域存放某結點的資料資訊;lchild 與rchild 分別存放指向左孩子和右孩子的指標,當左孩子或右孩子不存在時,相應指標域值為空(用符號∧或null 表示)。

科大C語言筆記 1

關於c語言 1.計算機的資料在電腦中儲存是以二進位制的形式.2.編譯預處理不是c語言的一部分,不佔執行時間,不要加分號 3.每個c語言程式寫完後,都是先編譯,後鏈結,最後執行。c obj exe 4.記住預定義識別符號可以做為使用者識別符號。c語言只有 八 十 十六進製制,沒有二進位制。但是執行時候...

C語言筆記(2)

變數的三大特點 1.變數的資料型別 主要說明變數占用記憶體大小 2.變數的作用域 變數的有效性範圍 3.變數的儲存型別 變數在記憶體中的儲存方式。不同的儲存方式,影響變數的生命週期 硬碟與記憶體的區別 1.速度 記憶體中讀寫資料的速度非常快,ddr3記憶體寫入速度可達到15g位元組每秒 150000...

c語言筆記2

1.字元陣列 c1 10 無 0 c1 10 hello 有 0 測量字串長度strlen c1 5 字元陣列與字串的區別 include include int main 結果 sizeof 6 4 strlen 5 5 綜上 sizeof 測量字元陣列的時候即長度加 0所以顯示6位,而字串則測得...