#include #include #define n 100 //葉子結點數
#define m 2*n-1 //樹中結點總數
#define maxn 0x7fffffff
typedef char elemtype;
typedef struct node
bitnode,*bitree;
typedef struct//哈夫曼樹的節點結構型別
htnode;
typedef struct//每個節點哈夫曼編碼的結構型別
hcode;
typedef struct node
node1,*linkqueuenode;
typedef struct
linkqueue;
bitree createbitree();//建立二叉樹
int leaf(bitree t);//分治法統計葉子節點數目
bool layerorder(bitree bt);//層次遍歷二叉樹
bool initqueue(linkqueue *q);//鏈佇列初始化
bool enterqueue(linkqueue *q,bitree x);//入隊,將資料元素x插入到佇列q中
bool deletequeue(linkqueue *q,bitree *x);//出隊,將佇列q的隊頭元素出隊並儲存到x所指的儲存空間中
bool isempty(linkqueue *q);//判斷鏈佇列是否為空
void preorder(bitree t);//先序
void inorder(bitree t);//中序
void postorder(bitree t);//後序
void createht(htnode ht,int n);//構造哈夫曼樹
void createhcode(htnode ht,hcode hcd,int n);//實現哈夫曼編碼
void disphcode(htnode ht,hcode hcd,int n);//輸出哈夫曼編碼
int main(void)
; double fnum[7]= ;
htnode ht[m];
hcode hcd[n];
for (int i=0; idata=x;
t->lchild=createbitree();
t->rchild=createbitree();
}return t;
}bool layerorder(bitree bt)//層次遍歷二叉樹
return true;
}bool initqueue(linkqueue *q)//鏈佇列初始化
else
return false;//溢位
}bool enterqueue(linkqueue *q,bitree x)//入隊,將資料元素x插入到佇列q中
else
return false;//溢位
}bool deletequeue(linkqueue *q,bitree *x)//出隊,將佇列q的隊頭元素出隊並儲存到x所指的儲存空間中
bool isempty(linkqueue *q)//判斷鏈佇列是否為空
int leaf(bitree t)//分治法統計葉子節點數目
void preorder(bitree t)//先序
}void inorder(bitree t)//中序
}void postorder(bitree t)//後序
}void createht(htnode ht,int n)//構造哈夫曼樹
else if (ht[k].weight}
}ht[i].weight=ht[lnode].weight+ht[rnode].weight;
ht[i].lchild=lnode;
ht[i].rchild=rnode;
ht[lnode].parent=i;
ht[rnode].parent=i;
}}void createhcode(htnode ht,hcode hcd,int n)//實現哈夫曼編碼
hc.start++; //start指向哈夫曼編碼最開始字元
hcd[i]=hc;
}}void disphcode(htnode ht,hcode hcd,int n)//輸出哈夫曼編碼
m+=ht[i].weight;
sum+=ht[i].weight*j;
printf("\n");
}printf("\n 平均長度=%.2lf\n",1.0*sum/m);
}
哈夫曼樹及二叉樹
一 昨天寫了個哈夫曼樹,其實難到不難,重點是利用標準庫里的優先佇列就很好辦了 哈夫曼樹主要是建立個最小堆,求最小加權路徑,就是求哈夫曼樹中非葉子結點的權值和 include priority queueq 這個是最大堆 最小堆這樣寫 priority queue,greater q 另外,用vs20...
哈夫曼樹及哈夫曼編碼
哈夫曼樹,最優二叉樹,帶權路徑長度 wpl 最短的樹。它沒有度為1的點,是一棵嚴格的二叉樹 滿二叉樹 了解哈夫曼樹,我們首先要知道樹的幾個相關術語,並了解什麼是wpl。注 樹的wpl這個概念非常重要,這個公式直接產生了哈夫曼編碼資料壓縮的應用 根據給定的n個權值構成n棵二叉樹的集合f 其中每棵二叉樹...
哈夫曼樹及哈夫曼編碼
給定n個權值作為n個葉子結點,構造一棵二叉樹,若帶權路徑長度達到最小,稱這樣的二叉樹為最優二叉樹,也稱為哈夫曼樹 huffman tree 哈夫曼樹是帶權路徑長度最短的樹,權值較大的結點離根較近。樹節點間的邊相關的數叫做權。從樹中的乙個節點到另乙個節點之間的分支構成兩個點之間的路徑,路徑上的分支數目...