哈夫曼樹類的構造 C 實現

2021-05-08 08:27:58 字數 1611 閱讀 6129

由哈夫曼樹的構造演算法可知,用乙個陣列存放原來的 n 個葉子結點和構造過程中臨時生成的結點,陣列的大小為 2n-1。所以,哈夫曼樹類 huffmantree 中有兩個成員字段: data陣列用於存放結點, leafnum表示哈夫曼樹葉子結點的數目。結點有四個域,乙個域 weight,用於存放該結點的權值;乙個域 lchild,用於存放該結點的左孩子結點在陣列中的序號;乙個域rchild,用於存放該結點的右孩

子結點在陣列中的序號;乙個域 parent, 用於判定該結點是否已加入哈夫曼樹中。哈夫曼樹結點的結構為。 

| weight | child |rchild |parent |

所以,結點類 node 有 4 個成員字段,weight 表示該結點的權值,lchild 和

rchild 分別表示左、右孩子結點在陣列中的序號,parent 表示該結點是否已加入

哈夫曼樹中,如果 parent 的值為-1,表示該結點未加入到哈夫曼樹中。當該結點

已加入到哈夫曼樹中時,parent 的值為其雙親結點在陣列中的序號。

weight     child      rchild      parent

結點類 node 的定義如下:

public class node

set }

//左孩子結點屬性

public int lchild

set }

//右孩子結點屬性

public int rchild

set }

//父結點屬性

public int parent

set }

//構造器

public node()

//構造器

public node(int w, int lc, int rc, int p) }

哈夫曼樹類 huffmantree中只有乙個成員方法create,它的功能是輸入n 個

葉子結點的權值,建立一棵哈夫曼樹。哈夫曼樹類huffmantree 的實現如下。

public class huffmantree

set }

//葉子結點數目屬性

public int leafnum

set }

//構造器

public huffmantree (int n)

//建立哈夫曼樹

public void create()

//處理n個葉子結點,建立哈夫曼樹

for (int i = 0; i < this.leafnum - 1; ++i)

else if ((data[i].weight < max2) 

&& (data[i].parent == -1)) }

data[tmp1].parent = this.leafnum + i;

data[this.leafnum + i].weight = data[tmp1].weight 

+ data[tmp2].weight;

data[this.leafnum + i].lchild = tmp1;

data[this.leafnum + i].rchild = tmp2;

} }

}

構造哈夫曼樹 哈夫曼編碼

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...