哈夫曼樹 最優二叉樹 原理及實現

2021-10-08 02:07:28 字數 1364 閱讀 8324

目錄簡介

相關概念

哈夫曼樹實現

實現原理:

實現**:

**實現步驟:

哈夫曼樹又被稱為最優二叉樹,是一類帶權路徑最短的二叉樹。

哈夫曼樹是二叉樹的一種應用,在資訊檢索中很常用。

根據給定的n個權值構造n棵二叉樹的集合f=,f集合中每棵二叉樹都只有乙個根節點。

選取f集合中兩棵根節點的權值最小的樹作為左、右子樹以構造一棵新的二叉樹,且將新的二叉樹的根節點的權值設為左、右子樹上根節點的權值之和。

將新的二叉樹加入到f集合中,並刪除(2)步中被選中的兩棵樹。

重複(2)和(3)步直到f集合中只剩下一棵樹,這棵樹就是哈夫曼樹。

/*** 構造哈夫曼樹

** @param nodes 節點集合

* @return 構造出來的哈夫曼樹的根節點

*/private static node createtree(listnodes)

return nodes.get(0);

}private static void quicksort(listnodes)

// 快速實現排序演算法,用於對節點進行排序

private static void subsort(listnodes, int start, int end) else

}swap(nodes, start, j);

// 遞迴左邊子串行

subsort(nodes, start, j - 1);

// 遞迴右邊子串行

subsort(nodes,j + 1, end);}}

private static void swap(listnodes, int i, int j)

public static listbreadthfirst(node root)

while (!queue.isempty())

if (p.rightchild != null)

}return list;}}

對list集合中所有節點進行排序。

找出list集合中權值最小的兩個節點。

以權值最小的兩個節點作為子節點建立新節點。

從list集合中刪除權值最小的兩個節點,將新節點新增到list集合中。

哈夫曼樹(最優二叉樹)

給定n個權值作為n的 葉子結點,構造一棵二叉樹,若帶權路徑長度達到最小 所謂樹的帶權路徑長度,就是樹中所有的葉結點 的權值乘上其到根結點的路徑長度 稱這樣的二叉樹為最優二叉樹,也稱為哈夫曼樹 huffman tree 哈夫曼樹是帶權路徑長度最短的樹,權值較大的結點離根較近。假設有n個權值,則構造出的...

哈夫曼樹(最優二叉樹)

最優二叉樹 哈夫曼樹 給定n個權值,試構造一棵有n個葉子結點的二叉樹,每個葉子結點帶權為wi。構造出來的二叉樹的形態可以有多個,我們把其中帶權路徑長度wpl最小的二叉樹稱作最優二叉樹或者哈夫曼樹。語言描述 根據給定的n個權值構成n棵二叉樹的集合f 其中每棵二叉樹ti中只有乙個帶權為wi的根結點,其左...

哈夫曼樹 最優二叉樹

差點忘記寫部落格了.哈夫曼樹 其實就是只利用葉子結點來儲存要用資訊的樹,只不過它在構造的時候就擁有了乙個迷人的特性.就是wpl 帶權路徑長度 是最小的.而且還能用這個樹的來為葉子結點中的資訊進行編碼,得出來的各個編碼一定不會相同,並且不會產生混淆的情況.通過哈夫曼樹的特點.實現了根據乙個佇列來建立一...