| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 680 人关注过本帖
标题:初学者 求教 c# 哈夫曼树
只看楼主 加入收藏
tcz
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-4-18
结帖率:0
收藏
已结贴  问题点数:4 回复次数:5 
初学者 求教 c# 哈夫曼树
我的程序出错,请教高手指点。小弟不胜感激!

public class HuffmanTree
{
    private Node[] data;    // 结点数组
    private int leafNum;    // 叶子结点数目
 
    // 索引器
    public Node this[int index]
    {

        get
         {
             return data[index];
}
set
{
    data[index] = value;
}
}
 
// 叶子结点数目属性
public int LeafNum
    {
        get
         {
             return leafNum;
}
set
{
    leafNum = value;
}
}
 
// 构造器
public HuffmanTree (int n)
{
   Node[]  data = new Node[2*n-1];
leafNum = n;
}
 
// 创建哈夫曼树
public void Create()
{
   
 
    // 输入n 个叶子结点的权值
            for (int i = 0; i < leafNum; ++i)
            {
                data[i].Weight = Convert.ToInt32( Console.ReadLine());
             }
 

    //处理 n 个叶子结点,建立哈夫曼树
            for (int i = 0; i < this.leafNum - 1; ++i)
            {
               
               
                int max2;
                int tmp2;
                int max1 = Int32.MaxValue;
                max2 = Int32.MaxValue;
               int tmp1 = tmp2 = 0;
 
                //在全部结点中找权值最小的两个结点
                for (int j = 0; j < this.leafNum + i; ++j)
                {
                    if ((data[i].Weight < max1)  
&& (data[i].Parent == -1))
                    {
                        max2 = max1;
                        tmp2 = tmp1;
                        tmp1 = j;
                        max1 = data[j].Weight;
                    }
                    else if ((data[i].Weight < max2)  
&& (data[i].Parent == -1))
                    {
                        max2 = data[j].Weight;
                        tmp2 = j;
                    }
                }
 
                data[tmp1].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;
    }
}
}


    class Program
    {
        static void Main(string[] args)
        {
            HuffmanTree ht = new HuffmanTree(21);
            ht.Create();
        }
    }
}
搜索更多相关主题的帖子: 叶子 set 不胜感激 private public 
2013-04-18 22:23
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
收藏
得分:2 
Node是个什么对象
2013-04-18 23:37
mangix
Rank: 2
等 级:论坛游民
帖 子:5
专家分:34
注 册:2013-4-5
收藏
得分:2 
我是刚学 C#,不过看你写的程序,我发现了以下几点问题。
1.    Node 结构体没有定义。
2.    // 构造器
      public HuffmanTree (int n)
      {
           Node[]  data = new Node[2*n-1];    //这个地方 Node[] 重复定义了
           leafNum = n;
      }

这些错误是可以调试发现的。至于算法的正确性,我没有验证检查,你可以试着先看一下。
2013-04-18 23:56
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
收藏
得分:0 
3楼挺不错的
看了这个程序,我就在纠结Node到底是什么东西
说是结构体吧,他在程序中有判断data[i].Parent == -1,那这个-1是什么时候赋进去的呢,结构体中又不能赋初值
说是个类吧,Node[]数组里面的每个对象又是null
2013-04-19 00:23
tcz
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-4-18
收藏
得分:0 
回复 4楼 yhlvht
不好意思,Node是个类,在程序里已经定义 就是忘了把代码贴出来了。
2013-04-19 11:21
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
收藏
得分:0 
那你Node[]  data = new Node[2*n-1]; 这样创建了一个Node类的数组,但是数组里面每一个元素是null呀,你需要实例化2*n-1个Node类放进去
2013-04-19 13:09
快速回复:初学者 求教 c# 哈夫曼树
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012200 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved