赫夫曼樹及其應用

2021-10-03 12:20:47 字數 997 閱讀 7581

首先我們先通過上述示例來構造這棵赫夫曼樹。

1、先把有權值的葉子結點按照從小到大的順序排列成乙個有序序列,即a5, e10, b15, d30, c40

2、取頭兩個最小權值的結點作為乙個新結點n1的兩個子結點,注意相對較小的時左孩子,這裡a就是n1的左孩子,e是n1的右孩子,此時新結點的權值就是兩個葉子權值的和15;

3、將n1替換a與e,插入有序序列中,保持從小到大排列,即: n115, b15, d30, c40。

4、重複步驟2,將n1與b作為乙個新結點n2的兩個子結點,此時新結點n2的權值為30;

5、將n2替換n1與b,插入有序序列中,保持從小到大排列,即:n230,d30,c40;

6、重複步驟2,將n2與d作為新結點n3的兩個子結點,n3的權值為60;

7、將n3替換n2與d,插入有序序列中,保持從小到大排列,即c40,n360。

8、重複步驟2,將c與n3作為乙個新結點t的兩個子結點,t即是根結點,完成赫夫曼樹的構造。

此時的二叉樹帶權路徑長度wpl=401+302+153+104+5*4=205,顯然此時構造出的二叉樹才是最優的赫夫曼樹。

通過剛才的步驟,我們可以總結出構造赫夫曼樹樹的赫夫曼演算法描述:

1、根據給定的n個權值構造n棵二叉樹的集合f=,其中每棵二叉樹ti中只有乙個帶權為wi根結點,其左右子樹均為空;

2、在f中選取兩棵根結點的權值最小的樹作為左右子樹構造一棵新的二叉樹,且置新的二叉樹的根結點的權值為其左右子樹上根結點的權值之和;

3、在f中刪除這兩棵樹,同時將新得到的二叉樹加入f中;

4、重複步驟2和3,直到f只含一棵樹為止,這棵樹便是赫夫曼樹。

赫夫曼樹及其應用

include include includeusing namespace std define n 4 typedef char huffmancode 動態分配陣列儲存赫夫曼編碼表 int wt n n個權值,分別對應a 7 b 5 c 2 d 4 templateclass huffmant...

資料結構 赫夫曼樹及其應用

赫夫曼 huffman 樹又稱最優樹,是一類帶權路徑長度最短的樹,有著廣泛的應用。1 基本概念 結點路徑 從樹中乙個結點到另乙個結點的之間的分支構成這兩個結點之間的路徑。路徑長度 結點路徑上的分支數目稱為路徑長度。樹的路徑長度 從樹根到每乙個結點的路徑長度之和。結點的帶權路徑長度 從樹的根結點到該結...

哈夫曼樹,赫夫曼樹

參考 赫夫曼樹,別名 哈夫曼樹 最優樹 以及 最優二叉樹 當用 n 個結點 這些結點都作為葉子結點且都有各自的權值 試圖構建一棵樹時,如果構建的這棵樹的帶權路徑長度最小,稱這棵樹為 最優二叉樹 有時也叫 赫夫曼樹 或者 哈夫曼樹 構建哈夫曼樹 在 n 個權值中選出兩個最小的權值,對應的兩個結點組成乙...