哈夫曼樹(huffman)

2021-09-04 12:20:24 字數 2813 閱讀 8909

學完了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 每次選擇兩個權值最小的二叉樹做子樹合併為乙個新的二叉樹,新二叉樹的權值為兩個子樹的和。直到森林中只剩一棵樹為止,該樹即為我們所求得的哈夫曼...