标题:大家帮我看看这个huffman树的建立函数错在哪了。。。。。
只看楼主
Invariably
Rank: 2
等 级:论坛游民
帖 子:54
专家分:46
注 册:2010-9-18
结帖率:90%
已结贴  问题点数:20 回复次数:2 
大家帮我看看这个huffman树的建立函数错在哪了。。。。。
# include<iostream>
using namespace std;
typedef struct{
    unsigned int weight;
    unsigned int parent;
    unsigned int lchild;
    unsigned int rchild;
}HTNode,*HuffmanTree;//动态分配数组存储赫夫曼树
typedef char* *HuffmanCode;
typedef struct pair{
    int s1;
    int s2;
}Pair;//用于后面的select函数返回连个最小的下标
Pair select(HuffmanTree HT,int n)//参数为Huffmantree的头指针和节点个数
{//选择两个权值最小的结点的下标
    Pair twomin={0,0};
    for(int i=1;i<=n&&twomin.s2==0;i++)
    {
        if((HT+i)->parent==0)//70
        {
            twomin.s1=i;
            for(int j=i+1;j<n&&twomin.s2==0;j++)//???
            {
                if((HT+j)->parent==0)
                    twomin.s2=j;
            }
        }
    }//给twomin的两个元素赋初值
    for(i=1;i<=n;i++)
    {
        if((HT+i)->parent==0)
        {
            if((HT+i)->weight<(HT+twomin.s1)->weight) twomin.s1=i;
            else if ((HT+i)->weight<(HT+twomin.s2)->weight) twomin.s2=i;
        }
    }
    return twomin;
}//select 函数
HuffmanTree  HuffmanTreeing(int* w,int n)//参数为频度数组的头指针和字符个数
{//w存放n个字符的权值,构造赫夫曼树HT,并求出n个字符的赫夫曼编码Hc
    if(n<1)return NULL;
    int m=2*n-1;
    HuffmanTree HT;
    HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));//0号元素未用
    HuffmanTree p=HT+1;
    int i;
    for(i=1;i<=n;i++,p++,w++)
    {
        p->weight=*w;
        p->parent=0;
        p->lchild=0;
        p->rchild=0;
    }//树的前n个节点赋初值
    for(;i<=m;i++,p++)
    {
        p->weight=0;
        p->parent=0;
        p->lchild=0;
        p->rchild=0;
    }//树的第n+1到m个节点赋初值
    Pair twomin;//用来记录两个权值最小的结点的下标
    for(i=n+1;n<=m;i++)
    {//建立赫夫曼树   
        twomin=select(HT,i-1);//在HT[1]到HT[i-1]中选择parent为0且weight只最小的两个节点,记序号分别为s1和s2
        HT[twomin.s1].parent=i,HT[twomin.s2].parent=i;
        HT[i].lchild=twomin.s1,HT[i].rchild=twomin.s2;
        HT[i].weight=HT[twomin.s1].weight+HT[twomin.s2].weight;
    }//返回HuffmanTree的头指针
    return HT;
}
int main()
{
    const mount=5;
    int w[mount]={1,2,3,4,5};
    HuffmanTreeing(w,mount);
}
搜索更多相关主题的帖子: parent 
2011-05-31 18:37
月如水0
Rank: 2
等 级:论坛游民
帖 子:29
专家分:76
注 册:2011-5-8
得分:20 
看完了。。。
2011-06-02 22:16
Invariably
Rank: 2
等 级:论坛游民
帖 子:54
专家分:46
注 册:2010-9-18
得分:0 
呵呵。。。不过最后自己编出来了
2011-06-07 12:12



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-341537-1-1.html




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

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