生活随笔
收集整理的這篇文章主要介紹了
数据结构 - 赫夫曼树
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
wpl最小的就是赫夫曼樹(shù)(所有葉子節(jié)點(diǎn)的帶權(quán)路徑長(zhǎng)度之和最小)
寫出來(lái)兩個(gè)節(jié)點(diǎn)連接,然后循環(huán)就可以了
package tree
.huffmantree
;import java
.util
.ArrayList
;
import java
.util
.Collections
;
import java
.util
.List
;public class huffmanTree {public static void main(String
[] args
) {int [] arr
= {13, 7, 8, 3, 29, 6, 1};Node huffmanTree
= createHuffmanTree(arr
);preOrder(huffmanTree
);}public static void preOrder(Node root
){if (root
!= null
){root
.preOrder();}else{System
.out
.println("空樹(shù)");}}public static Node
createHuffmanTree(int arr
[]){List
<Node> nodes
= new ArrayList<>();for(int value
: arr
){nodes
.add(new Node(value
));}while (nodes
.size() > 1) {Collections
.sort(nodes
);Node leftNode
= nodes
.get(0);Node rightNode
= nodes
.get(1);Node parent
= new Node(leftNode
.value
+ rightNode
.value
);parent
.left
= leftNode
;parent
.right
= rightNode
;nodes
.remove(leftNode
);nodes
.remove(rightNode
);nodes
.add(parent
);}return nodes
.get(0);}
}
class Node implements Comparable<Node>{int value
; Node left
; Node right
; @Overridepublic int compareTo(Node o
) {return this.value
- o
.value
;}public void preOrder(){System
.out
.println(this);if (this.left
!= null
){this.left
.preOrder();}if (this.right
!= null
){this.right
.preOrder();}}public Node(int value
){this.value
= value
;}@Overridepublic String
toString() {return "Node{" +"value=" + value
+'}';}
}
結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的数据结构 - 赫夫曼树的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。