使用最小堆構造哈夫曼樹

2021-09-11 11:42:01 字數 1458 閱讀 2819

哈夫曼樹:

構造哈夫曼樹的演算法:

構造哈夫曼樹的思路:

程式實現:

typedef struct huffmantree* htree;

typedef struct heap* minheap;

typedef htree elementtype;

struct huffmantree;

struct heap;

minheap creatminheap(int);

minheap adjustheap(minheap);

void insert(minheap h,htree);

elementtype deleteheap(minheap);

htree creatht(int);

void freeh(minheap);

使用指標陣列存放哈夫曼樹節點,陣列中每乙個元素都是指向哈夫曼樹節點的指標

在creatminheap()函式中輸入一組資料作為權值,然後通過呼叫adjustheap()函式將這組資料調整為最小堆形式

將adjustheap()函式單獨寫是因為在後面堆刪除和堆插入操作都需要調整最小堆,**復用,程式看起來更簡潔

minheap adjustheap(minheap h)

if(h->data[parent]->wight > h->data[child]->wight)}}

return h;

}minheap creatminheap(int maxsize)

printf("input a series of wight:\n");

for(int i=1;i<=h->maxsize;i++)

return adjustheap(h);

}

刪除根節點並返回,因為刪除後樹依然要保持完全二叉樹的結構,所以將最後乙個節點放入刪除的根節點的位置再重新排列樹。

elementtype deleteheap(minheap h)
插入到完美二叉樹的最後,然後重新調整為最小堆

void insert(minheap h,htree t)
htree creatht(int maxsize)

t = deleteheap(h);

freeh(h);

return t;

}

最後構造完哈夫曼樹後使用freeh()函式將堆的空間釋放。

實現漢夫曼樹時在糾結建立堆函式中關於指向指標的指標,因為帶著指向指標的指標來考慮所以很快就把自己給繞進去了,其實考慮這個問題很簡單,就是把指向指標的指標就當作乙個普通的指標來對待就可以了,只是它指向的記憶體中存放的是乙個位址。

構造哈夫曼樹 哈夫曼編碼

1.權值越大的節點,距離根越近 2.樹中沒有度為1的節點,這類樹叫正則 嚴格 二叉樹,樹的總節點 2 雙分支結點 1 單分支結點 雙分支結點 3.樹的帶權路勁 wpl 所有葉子結點的帶權長度路勁之和 長度最短。嗶哩嗶哩王卓老師的口訣 構造森林全是根,選用兩小選新樹,刪除兩小添新人,重複23剩單根 1...

哈夫曼樹構造 哈夫曼編碼

一 哈夫曼樹 p189 1.定義 帶權路徑長度 wpl 最小的二叉樹稱為哈夫曼樹 wpl 樹中所有葉子節點的帶權路徑長度之和 帶權路徑長度 從樹根到任意節點的路徑長度與該節點上權值的乘積 2.構造 1 將這n個節點分別作為n課僅含乙個結點的二叉樹,構成森林f 2 構造乙個新節點,從f中選取兩棵根節點...

哈夫曼樹構造

usr bin env python3 coding utf 8 created on fri jul 27 18 08 26 2018 author luogan 樹節點類構建 class treenode object def init self,data self.val data 0 sel...