哈夫曼樹的構建

2021-10-23 18:48:43 字數 1053 閱讀 2550

給定n個權值作為n個葉子結點,構造一棵二叉樹,若該樹的帶權路徑長度達到最小,稱這樣的二叉樹為最優二叉樹,也稱為哈夫曼樹(huffman tree)。哈夫曼樹是帶權路徑長度最短的樹,權值較大的結點離根較近。

假設有n個權值,則構造出的哈夫曼樹有n個葉子結點。 n個權值分別設為 w1、w2、…、wn,則哈夫曼樹的構造規則為:

(1) 將w1、w2、…,wn看成是有n 棵樹的森林(每棵樹僅有乙個結點);

(2) 在森林中選出兩個根結點的權值最小的樹合併,作為一棵新樹的左、右子樹,且新樹的根結點權值為其左、右子樹根結點權值之和;

(3)從森林中刪除選取的兩棵樹,並將新樹加入森林;

(4)重複(2)、(3)步,直到森林中只剩一棵樹為止,該樹即為所求得的哈夫曼樹。

public

class

huffmantree

/* 迴圈將最小的兩 個數組成新的二叉樹

然後將最小的數移除

將新的二叉樹放到陣列中

直達陣列中只剩乙個數為止

*/while

(nodes.

size()

>1)

}}class

node

public

intgetvalue()

public

void

setvalue

(int value)

public node getleft()

public

void

setleft

(node left)

public node getright()

public

void

setright

(node right)

@override

public string tostring()

';}}

//實現比較介面

class

nodecomparator

implements

comparator

}

構建哈夫曼樹,並輸出哈夫曼編碼

輸入條件 輸入從小到大排列的n個正整數,作為葉子的權值,共同完成構建具有n片葉的,根指標為hroot的哈夫曼樹 1 程式前部的定義 include include include define max 999 監督元 define n 6 n個葉子節點 char s 6 存放哈夫曼編碼的陣列,初始化...

哈夫曼編碼 哈夫曼樹

1.定義 哈夫曼編碼主要用於資料壓縮。哈夫曼編碼是一種可變長編碼。該編碼將出現頻率高的字元,使用短編碼 將出現頻率低的字元,使用長編碼。變長編碼的主要問題是,必須實現非字首編碼,即在乙個字符集中,任何乙個字元的編碼都不是另乙個字元編碼的字首。如 0 10就是非字首編碼,而0 01不是非字首編碼。2....

哈夫曼樹 哈夫曼編碼

定義從a結點到b結點所經過的分支序列為從a結點到b結點的路徑 定義從a結點到b結點所進過的分支個數為從a結點到b結點的路徑長度 從二叉樹的根結點到二叉樹中所有結點的路徑長度紙盒為該二叉樹的路徑長度 huffman樹 帶權值路徑長度最小的擴充二叉樹應是權值大的外界點舉例根結點最近的擴充二叉樹,該樹即為...