哈夫曼樹的建立(詳細步驟)

2021-10-08 19:45:38 字數 921 閱讀 9591

// 構造赫夫曼樹

#include

using

namespace std;

//哈夫曼樹的儲存表示

typedef

struct

htnode,

*huffmantree;

//查處權值最小且雙親為0的2的節點

void

select

(huffmantree ht,

int len,

int&s1,

int&s2)

}int temp = ht[s1]

.weight;

//將原值存放起來,然後先賦予最大值,防止s1被重複選擇

ht[s1]

.weight =

0x3f3f3f3f

;for

(i =

1; i <= len; i++)}

ht[s1]

.weight = temp;

//恢復原來的值

}void

creathuffmantree

(huffmantree &ht,

int n)

cout <<

"請輸入葉子結點的權值:\n"

;for

(i =

1; i <= n;

++i)

//輸入前n個單元中葉子結點的權值

cin >> ht[i]

.weight;

/*――――――――――初始化工作結束,下面開始建立赫夫曼樹――――――――――*/

for(i = n +

1; i <= m;

++i)

//for

}// creathuffmantree

intmain()

哈夫曼樹以及哈夫曼編碼的構造步驟

注意 哈夫曼樹並不唯一,但帶權路徑長度一定是相同的。第一部分 由給定結點構造哈夫曼樹 1 8個結點的權值大小如下 2 從19,21,2,3,6,7,10,32中選擇兩個權小結點。選中2,3。同時算出這兩個結點的和5。3 從19,21,6,7,10,32,5中選出兩個權小結點。選中5,6。同時計算出它...

哈夫曼樹的建立以及哈夫曼編碼

主要源 如下 include include define max num 105 typedef struct htnode,htree void selecttwomin htree ht,int n,int s1,int s2 ht s1 visited 1 將最小的頻率對應的結點標記為已被訪...

哈夫曼樹的建立

include include using namespace std typedef struct node tree void find tree t,int s1,int s2,int n int creat tree t,int n int s1,s2 先找了兩個值,然後一直比較找最小,也可...