zoukankan      html  css  js  c++  java
  • Huffman tree的C#实现

    1. 结构类型定义:

        public class HuffmanTree
        {
            
    public int Weight { setget; }
            
    public HuffmanTree Left { setget; }
            
    public HuffmanTree Right { setget; }
        }

    2. 构建树:

    代码
            public static HuffmanTree CreateHuffmanTree(int[] data)
            {
                
    if (data == null || data.Length < 1)
                {
                    
    throw new Exception("data");
                }

                IList
    <HuffmanTree> list = new List<HuffmanTree>();
                
    foreach (var d in data)
                {
                    list.Add(
    new HuffmanTree
                    {
                        Weight 
    = d,
                        Left 
    = null,
                        Right 
    = null
                    });
                }

                HuffmanTree parent 
    = new HuffmanTree();
                HuffmanTree left 
    = new HuffmanTree();
                HuffmanTree right 
    = new HuffmanTree();

                
    while (list.Count > 1)
                {
                    left 
    = list.First(item => item.Weight == list.Min(i => i.Weight));
                    list.Remove(left);
                    right 
    = list.First(item => item.Weight == list.Min(i => i.Weight));
                    list.Remove(right);

                    parent 
    = new HuffmanTree
                    {
                        Weight 
    = left.Weight + right.Weight,
                        Left 
    = left,
                        Right 
    = right
                    };
                    list.Add(parent);
                }

                
    return parent;
            }

    3. 测试:

                int[] data = { 7,5,2,4};
                HuffmanTree tree 
    = HuffmanCode.CreateHuffmanTree(data);

     download

  • 相关阅读:
    自适应高度的 文本框
    点击小图片遮罩显示大图片
    C++中的声明与定义
    LeetCode_Bit Manipulation
    “纯”面向对象
    指针和引用
    new和delete用法小结
    C++中的变量属性小结
    C++的一些黑暗料理
    Python中的字典和集合
  • 原文地址:https://www.cnblogs.com/Langzi127/p/1783255.html
Copyright © 2011-2022 走看看