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