源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C#求解哈夫曼树,实例代码

  • 时间:2021-03-17 05:14 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C#求解哈夫曼树,实例代码
[u]复制代码[/u] 代码如下:
  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;         }     }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部