學完了huffman樹,講一下自己對它的理解
圖二
public class huffmantree
@override
public int compareto(@nonnull treenodeo) else if (this.weight < o.weight)
return 0;}}
}
/**
* 傳乙個陣列進來 建立哈夫曼樹
** @param list 集合
* @return 根節點
*/public treenodecreatehuffmantree(arraylist> list)
root = list.get(0);
return list.get(0);
}
/**
* 橫向依次輸出樹
** @param root 根節點
*/public void showhuffmantree(treenoderoot)
//如果左右還有孩子 就把左右孩子也入隊,到下乙個迴圈排在後面依次輸出
if (node.left != null)
if (node.right != null) }}
/**
* 根據節點獲取編碼
** @param node 節點
* @return 編碼
*/public string getcode(treenodenode) else if (treenode.parent.right == treenode)
treenode = treenode.parent;
}//把stack裡的值出棧
while (!stack.isempty())
return str;
}
/**
* 根據傳進來的編碼返回乙個list
** @param code 編碼字串
* @return 集合
*/public arraylist> gettreenodelist(string code)
}} else if (code.charat(i) == '1') }}
}return resultlist;
}
@org.junit.test
public void huffmantreetest()
huffmantreehuffmantree = new huffmantree<>();
//建立樹
huffmantree.treenode root = huffmantree.createhuffmantree(list);
//展示樹
system.out.print("\nhuffmantree裡:");
huffmantree.showhuffmantree(root);
string node1code = huffmantree.getcode(node1);
string node2code = huffmantree.getcode(node2);
string node3code = huffmantree.getcode(node3);
string node4code = huffmantree.getcode(node4);
string node5code = huffmantree.getcode(node5);
//根據節點查詢相應編碼
system.out.println("\n" + node1.item + " 在huffmantree裡的編碼:" + node1code);
system.out.println(node2.item + " 在huffmantree裡的編碼:" + node2code);
system.out.println(node3.item + " 在huffmantree裡的編碼:" + node3code);
system.out.println(node4.item + " 在huffmantree裡的編碼:" + node4code);
system.out.println(node5.item + " 在huffmantree裡的編碼:" + node5code);
string code = node1code + node2code + node3code + node4code + node5code;
system.out.println("list裡所有值的組成編碼:" + code);
system.out.println("******************************==解 碼******************************==");
Huffman樹(哈夫曼樹)
哈夫曼樹又稱最優二叉樹,是一種帶權路徑長度最短的二叉樹。所謂樹的帶權路徑長度,就是樹中所有的葉結點的權值乘上其到根結點的路徑長度 若根結點為0層,葉結點到根結點的路徑長度為葉結點的層數 樹的帶權路徑長度記為wpl w1 l1 w2 l2 w3 l3 wn ln n個權值wi i 1,2,n 構成一棵...
樹之哈夫曼 Huffman 樹
1.概念 實際生活中,樹中結點常常表示某種意義的數值,稱為該結點的權值。從根結點到任意結點的路徑長度 經過的邊數 與該結點上權值的乘積稱為該結點的帶權路徑長度。樹中所有葉結點的帶權路徑長度之和稱為該樹的帶權路徑長度,記為 wpl wi li i 1,2 n 帶權路徑長度 wpl 最小的二叉樹稱為哈夫...
哈夫曼(Huffman)樹構造和哈夫曼編碼
n個權值,則構造出的哈夫曼樹有 n個葉子結點。n個權值分別設為 w1,w2,wn,則哈夫曼樹的構造規則為 1 根據給定的 n個權值構成n 棵二叉樹的集合 f 2 每次選擇兩個權值最小的二叉樹做子樹合併為乙個新的二叉樹,新二叉樹的權值為兩個子樹的和。直到森林中只剩一棵樹為止,該樹即為我們所求得的哈夫曼...