哈夫曼樹(霍夫曼樹)又稱為最優樹.
1、路徑和路徑長度
在一棵樹中,從乙個結點往下可以達到的孩子或孫子結點之間的通路,稱為路徑。通路中分支的數目稱為路徑長度。若規定根結點的層數為1,則從根結點到第l層結點的路徑長度為l-1。
2、結點的權及帶權路徑長度
若將樹中結點賦給乙個有著某種含義的數值,則這個數值稱為該結點的權。結點的帶權路徑長度為:從根結點到該結點之間的路徑長度與該結點的權的乘積。
3、樹的帶權路徑長度
樹的帶權路徑長度規定為所有葉子結點的帶權路徑長度之和,記為wpl
#include
#include
#include
/* 哈夫曼樹的結構體 */
typedef struct sthunode
hunode;
/** 找出權值陣列裡面,最小的兩個權值下標
* 函式請參:hunode *parray 存放節點的指標陣列
int n 陣列裡面的元素個數
int* p1 存放最小權值的下標
int* p2 存放第二小權值的下標
*/int findsmalldata(hunode *parray ,int n,int* p1, int* p2)
for(index = 0; index
< n; index++)
else
if(parray[index]->data < sec_small)
}
}return0;}
/** 函式功能:構建哈夫曼樹
* 函式請參:int* a 權值陣列
int n 這個陣列裡面有多少個資料
*/hunode* createhutree(int* a, int n)
/* 構建哈夫曼樹 */
for(index = 0; index
< n-1; index++)
return pnewnode;
}/* 前序遍歷該二叉樹 */
void preorderhuffman(hunode* root)
}int main()
; hunode* root = null;
/* 構建哈夫曼樹 */
root = createhutree(a,4);
/* 前序遍歷 */
preorderhuffman(root);
printf("\n");
return
0;}
C語言實現哈夫曼樹
include include typedef struct nodebinode void show binode root if root r null 哈夫曼樹 void a1 權值陣列,為方便直接從小到大有序 int n 6,x,y,z,i,j binode root null binode...
C語言實現哈夫曼樹
ddl是第一生產力,公理 哈夫曼樹又稱最優二叉樹。它是 n 個帶權葉子結點構成的所有二叉樹中,帶權路徑長度 wpl 最小的二叉樹。就是構造乙個哈夫曼樹,然後輸出最小帶權路徑 wpl 大致思路 每個結點自成一棵樹,成森林 選擇所有樹的根結點 不為null 中權值最小的兩個,合併,新malloc乙個節點...
哈夫曼樹 (c語言)資料結構
include include include define n 100 typedef struct hfmshfmsnode typedef char hfmscode 動態分配陣列儲存哈夫曼編碼 定義結構體型別 void select hfmsnode ht,int len int s1,in...