package com.数据结构;
import java.util.ArrayList;
import java.util.Collections;
public class 哈夫曼树 {
//将数列转成哈夫曼树
public static void main(String[] args) {
int[] arr = new int[]{13,7,8,3,29,6,1};
ArrayList<NodeTree> list = new ArrayList<>();
for(int temp : arr){
list.add(new NodeTree(temp));
}
while(list.size()>1){
Collections.sort(list);
NodeTree n1 = list.get(0);
NodeTree n2 = list.get(1);
NodeTree n3 = new NodeTree(n1.getData()+n2.getData(),n1,n2);
list.remove(n1);
list.remove(n2);
list.add(n3);
}
new HafmTree(list.get(0)).look();
}
}
class HafmTree{
private NodeTree root;
public HafmTree() {
}
public HafmTree(NodeTree root) {
this.root = root;
}
public void look(){
if(root==null){
System.out.println("数空 无法遍历");
}else{
this.root.look();
}
}
}
class NodeTree implements Comparable<NodeTree>{ //树结点
private int data;
private NodeTree Lift ;
private NodeTree Right ;
public NodeTree() {
}
public NodeTree(int data) {
this.data = data;
}
public NodeTree(int data, NodeTree lift, NodeTree right) {
this.data = data;
Lift = lift;
Right = right;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public NodeTree getLift() {
return Lift;
}
public void setLift(NodeTree lift) {
Lift = lift;
}
public NodeTree getRight() {
return Right;
}
public void setRight(NodeTree right) {
Right = right;
}
public void look(){ //前序遍历
System.out.println(this);
if(this.getLift()!=null){
this.getLift().look();
}
if(this.getRight()!=null){
this.getRight().look();
}
}
@Override
public int compareTo(NodeTree o) { //升序排序
return this.data-o.data;
}
@Override
public String toString() {
return "NodeTree{" +
"data=" + data +
'}';
}
}
哈夫曼树 java
最新推荐文章于 2026-01-05 17:06:32 发布
本文介绍了一个使用Java实现的哈夫曼树构建过程。通过将一系列数值转化为节点,并利用优先级队列进行排序,最终构建出一棵哈夫曼树。文章详细展示了如何通过循环和排序操作,不断合并最小的两个节点,直至生成完整的哈夫曼树,并提供了树的遍历方法。
1354

被折叠的 条评论
为什么被折叠?



