zoukankan      html  css  js  c++  java
  • C#求解哈夫曼树

     
    C#求解哈夫曼树,树是用数组保存的
    
      class HuffmanTree
        {
            private Node[] data;
            public int LeafNum { get; set; }
            public Node this[int index]
            {
                get { return data[index]; }
                set { data[index] = value; }
            }
            public HuffmanTree(int n) 
            {
                data = new Node[2 * n - 1];
                for (int i = 0; i < 2 * n - 1; i++)
                {
                    data[i] = new Node();
                }
                LeafNum = n;
            }
            public void Create(List<int> list)
            {
                int min1;
                int min2;
                int tmp1, tmp2;
                for (int i = 0; i < list.Count; i++)
                {
                    data[i].Weight = list[i];
                }               
                for (int i = 0; i < LeafNum-1; i++)
                {
                    min1 = min2 = int.MaxValue;
                    tmp1 = tmp2 = 0;
    
                   //获取数组中最小的2个值
                    for (int j = 0; j < LeafNum + i; j++)
                    {
                        if (data[j].Weight<min1&&data[j].Parent == -1)
                        {
                            min2 = min1;
                            tmp2 = tmp1;
                            min1 = data[j].Weight;
                            tmp1 = j;
                        }
                       else if (data[j].Weight < min2 && data[j].Parent == -1)
                        {
                            min2 = data[j].Weight;
                            tmp2 = j;
                        }                 
                    }
                    data[tmp1].Parent = this.LeafNum + i;
                    data[tmp2].Parent = this.LeafNum + i;
                    data[this.LeafNum + i].Weight = data[tmp1].Weight + data[tmp2].Weight;
                    data[this.LeafNum + i].LChild = tmp1;
                    data[this.LeafNum + i].RChild = tmp2;
                }
            }
    
    
    //树的结点(树是用数组保存的)  
    
    public class Node
        {
            public int Weight { get; set; }//权值
            public int LChild { get; set; }//左孩子在数组中的位置
            public int RChild { get; set; }//右孩子在数组中的位置
            public int Parent { get; set; }//父节点在数组中的位置
            public Node()
            {
                Weight = 0;
                LChild = -1;
                RChild = -1;
                Parent = -1;//-1表示没有
            }
            public Node(int weight,int lChild,int rChild,int parent )
            {
                this.Weight = weight;
                this.LChild = lChild;
                this.RChild = rChild;
                this.Parent = parent;
            }
        }
  • 相关阅读:
    使用C#开发ActiveX控件
    安装Python 3.6
    SDL 2.0 API by Category
    SDL的基础知识以及利用SDL播放视频
    区块链的java实现
    区块链工业架构设计
    微服务架构的优势与不足
    微服务架构设计
    FFmpeg常用基本命令
    FFmpeg进行屏幕录像和录音
  • 原文地址:https://www.cnblogs.com/wxj111/p/3035395.html
Copyright © 2011-2022 走看看