哈夫曼树解码

在这里插入图片描述
以下为手动算出哈夫曼树并暴力构建树的方法

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>

typedef struct tree
{
    char element;
    struct tree* left;
    struct tree* right;
}TREE;
typedef struct tree* Tree;
Tree CreateTree(Tree T);
void Preorder(Tree T);

int main()
{
    Tree T=NULL,root=NULL;
    T=CreateTree(T);
    root=T;
    char initial[100];
    scanf("%s",initial);
    int length=0;
    length=strlen(initial);
    for(int i=0;i<length;)
    {
        while(T->left!=NULL)
        {
            if(initial[i]=='0')
            {
                T=T->left;
            }
            if(initial[i]=='1')
            {
                T=T->right;
            }
            i++;
        }
        printf("%c",T->element);
        T=root;

    }
    //Preorder(T);//
    return 0;
}

void Preorder(Tree T)
{
    if(T!=NULL)
    {
        printf("%c",T->element);
        Preorder(T->left);
        Preorder(T->right);
    }

}

Tree CreateTree(Tree T)
{
    Tree T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14;
    T = (Tree)malloc(sizeof(TREE));
    T1 = (Tree)malloc(sizeof(TREE));
    T->left=T1;
    T1->element='0';
    T3 = (Tree)malloc(sizeof(TREE));
    T1->left=T3;
    T3->element='b';
    T3->left=NULL;
    T3->right=NULL;
    T4 = (Tree)malloc(sizeof(TREE));
    T1->right=T4;
    T4->element='g';
    T4->left=NULL;
    T4->right=NULL;
    T2 = (Tree)malloc(sizeof(TREE));
    T->right=T2;
    T2->element='1';
    T5 = (Tree)malloc(sizeof(TREE));
    T2->left=T5;
    T5->element='0';
    T6 = (Tree)malloc(sizeof(TREE));
    T2->right=T6;
    T6->element='e';
    T6->left=NULL;
    T6->right=NULL;
    T7 = (Tree)malloc(sizeof(TREE));
    T5->left=T7;
    T8 = (Tree)malloc(sizeof(TREE));
    T5->right=T8;
    T8->element='1';
     T12 = (Tree)malloc(sizeof(TREE));
    T8->right=T12;
    T12->element='h';
    T12->left=NULL;
    T12->right=NULL;
    T11 = (Tree)malloc(sizeof(TREE));
    T8->left=T11;
    T11->element='a';
    T11->left=NULL;
    T11->right=NULL;
    T10 = (Tree)malloc(sizeof(TREE));
    T7->right=T10;
    T10->element='d';
    T10->left=NULL;
    T10->right=NULL;
     T9 = (Tree)malloc(sizeof(TREE));
    T7->left=T9;
    T7->element='0';
    T9->element='0';
    T13 = (Tree)malloc(sizeof(TREE));
    T9->left=T13;
    T13->element='c';
    T13->left=NULL;
    T13->right=NULL;
    T14 = (Tree)malloc(sizeof(TREE));
    T9->right=T14;
    T9->element='0';
    T14->element='f';
    T14->left=NULL;
    T14->right=NULL;
    return T;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值