生活随笔
收集整理的這篇文章主要介紹了
数据结构 - 赫夫曼树
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
wpl最小的就是赫夫曼樹(所有葉子節(jié)點的帶權(quán)路徑長度之和最小)
寫出來兩個節(jié)點連接,然后循環(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("空樹");}}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é)
以上是生活随笔為你收集整理的数据结构 - 赫夫曼树的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。