10-B. DS二叉树--赫夫曼树解码(含代码框架)

10-哈夫曼编码及综合

题目描述
已知赫夫曼编码算法和程序,在此基础上进行赫夫曼解码

在赫夫曼树的类定义中增加了一个公有方法:

int Decode(const string codestr, char txtstr[]);//输入编码串codestr,输出解码串txtstr

该方法如果解码成功则返回1,解码失败则返回-1,本程序增加宏定义ok表示1,error表示-1

解码方法的代码框架如下:
在这里插入图片描述
输入
第一行输入t,表示有t个测试实例
第二行先输入n,表示第1个实例有n个权值,接着输入n个权值,权值全是小于1万的正整数
第三行输入n个字母,表示与权值对应的字符
第四行输入k,表示要输入k个编码串
第五行起输入k个编码串
以此类推输入下一个示例


输出
每行输出解码后的字符串,如果解码失败直接输出字符串“error”,不要输出部分解码结果

输入样例
2
5 15 4 4 3 2
A B C D E
3
11111
10100001001
00000101100
4 7 5 2 4
A B C D
3
1010000
111011
111110111

AAAAA
ABEAD
error
BBAAA
error
DCD

#include<iostream>
#include<string>
#include<cstring>
#define ok 1
#define error -1
using namespace std;

const int maxw=9999;

class huffnode
{
   
    public:
        int weight,parent,lchild,rchild;
        
};

class huffman
{
   
    private:
        void maketree();
        void selectmin(int pos,int *s1,int *s2);
    public:
        int len;
        int lnum;
        huffnode *hufftree;
        string *huffcode;
        void maketree(int n,int *wt);
        void coding();
        void destroy();
        int decode(const string codestr,char *txtstr);//解码!
};

void huffman::maketree(int n,int *wt)
{
   
    int i;
    lnum=n;
    len=2*n-1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值