哈夫曼树的JAVA实现

package com.xiejianjun.day09;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @author bilibilidick
 * @version 2022 04
 * @date 2022/4/24 17:05
 */

public class HuffmanTree {

    public static void main(String[] args) {
        int arr[] = {13, 7, 8, 3, 29, 6, 1};
        List<BinaryNode> list = new ArrayList<>();
        for (int i : arr) {
            list.add(new BinaryNode(i));
        }
        while (list.size() >= 2) {
            Collections.sort(list);
            BinaryNode node1 = list.get(0);
            BinaryNode node2 = list.get(1);
            BinaryNode parent = new BinaryNode(node1.value + node2.value);
            parent.left = node1;
            parent.right = node2;
            list.add(parent);
            list.remove(parent.left);
            list.remove(parent.right);
        }

        list.get(0).preOrder();

    }

    static class BinaryNode implements Comparable<BinaryNode>{
        int value;
        BinaryNode left;
        BinaryNode right;

        public BinaryNode(int value) {
            this.value = value;
        }

        public void preOrder() {
            System.out.println(this.value);
            if (this.left != null) this.left.preOrder();
            if (this.right != null) this.right.preOrder();
        }

        @Override
        public int compareTo(BinaryNode o) {
            return this.value - o.value;
        }

        @Override
        public String toString() {
            return "BinaryNode{" +
                    "value=" + value +
                    '}';
        }
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值