国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#求解哈夫曼樹,實例代碼

2020-01-24 03:27:01
字體:
來源:轉載
供稿:網友

復制代碼 代碼如下:

  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;
        }
    }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阳东县| 鲜城| 平邑县| 石景山区| 巫溪县| 鸡西市| 德惠市| 滁州市| 盐源县| 丹东市| 宕昌县| 兰考县| 义马市| 河曲县| 房产| 长沙县| 禹城市| 安徽省| 舒兰市| 来凤县| 衡山县| 武定县| 贞丰县| 昆山市| 临安市| 阿克苏市| 刚察县| 高密市| 嘉义县| 井研县| 皮山县| 乌兰浩特市| 永春县| 彭阳县| 南木林县| 光山县| 册亨县| 新密市| 东丰县| 德惠市| 临猗县|