以下为手动算出哈夫曼树并暴力构建树的方法
#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;
}