package bitree;
/** *@description 哈夫曼樹結點結構
* *@date 2023年12月30日
*/class huffmannode
// 構造乙個具有權值的結點
public
huffmannode(int weight)
public
intgetweight()
public
void
setweight(int weight)
public
intgetflag()
public
void
setflag(int flag)
public huffmannode getparent()
public
void
setparent(huffmannode parent)
public huffmannode getlchild()
public
void
setlchild(huffmannode lchild)
public huffmannode getrchild()
public
void
setrchild(huffmannode rchild)
}/**
*@description 構造哈夫曼樹和哈夫曼編碼
* *@date 2023年12月30日
*/public
class
huffmantree
//建立哈夫曼樹
for(int i = n; i < m; i++)
// 從葉子結點到根 逆向求每個字元的哈夫曼編碼
int huffcode = new
int[n][n];
for(int j = 0; j < n; j++)
else
// 編碼開始標誌是-1
huffcode[j][start] = -1;}}
return huffcode;
}/**
*@description 在hn[0……i-1]選擇不在哈夫曼樹中且weight最小的結點
*@param hn
*@param end
*@return
*@author liuquan
*@date 2023年12月30日
*/private huffmannode selectmin(huffmannode hn, int end)
}return min;
}public
static
void
main(string args) ;
huffmantree t = new huffmantree();
//求哈夫曼編碼
int hn = t.huffmancoding(w);
system.out.println("哈夫曼編碼為:");
for(int i = 0; i < hn.length; i++)
break;}}
system.out.println();
}}
}
樹轉換成二叉樹:
二叉樹轉換成樹:
森林與二叉樹的轉換
結點包含 資料域資訊data + 父結點在儲存結構中的位置資訊parent。parent=-1代表其是根結點。
結點包含 資料域資訊data + 孩子鍊錶的頭指標firstchild。
結點包含 資料域資訊data + 父結點在儲存結構中的位置資訊parent +孩子鍊錶的頭指標firstchild。
結點包含 資料域資訊data + (左指標)孩子鍊錶的頭指標firstchild + (右指標)該結點的下乙個兄弟nextsibling
資料結構 哈夫曼樹 哈夫曼編碼
哈夫曼樹又稱最優樹 二叉樹 是一類帶權路徑最短的樹。構造這種樹的演算法最早是由哈夫曼 huffman 1952年提出,這種樹在資訊檢索中很有用。結點之間的路徑長度 從乙個結點到另乙個結點之間的分支數目。樹的路徑長度 從樹的根到樹中每乙個結點的路徑長度之和。結點的帶權路徑長度 從該結點到樹根之間的路徑...
哈夫曼編碼 哈夫曼樹 (資料結構)
哈夫曼編碼,又稱霍夫曼編碼,是一種編碼方式,哈夫曼編碼是可變字長編碼 vlc 的一種。huffman於1952年提出一種編碼方法,該方法完全依據字元出現概率來構造異字頭的平均長度最短的碼字,有時稱之為最佳編碼,一般就叫做huffman編碼 有時也稱為霍夫曼編碼 include include inc...
資料結構 C描述 筆記 哈夫曼樹
葉子結點的權值 對葉子結點賦予的乙個有意義的數值量。二叉樹的帶權路徑長度 設二叉樹具有n個帶權值的葉子結點,從根結點到各個葉子結點的路徑長度與相應葉子結點權值的乘積之和。給定一組確定權值的葉子結點,帶權路徑長度最小的二叉樹 n個結點權值w1,w2,wn 第一步 將這n個結點分別作為僅含乙個結點的二叉...