資料結構 哈夫曼樹權值相等問題

2021-10-02 15:09:13 字數 1246 閱讀 7459

在哈夫曼樹排序中,當遇見有兩個權值相等的情況下,怎樣選擇排序,以及先後選擇排序後打的區別;

1、我們可以統一確定左子節點和右子節點的大小關係,例如所有構造都必須使得左子節點的權值不小於右子節點,免得給出相同的原始節點序列,所構造的哈夫曼樹結構不同

2、節點按照權值排序的規則,例如兩個原始節點或者乙個原始節點和乙個新建節點,具有相同的權值時,需要統一序列中的前後順序(序列中的前後順序也就是確定哪個是左子節點和右子節點),目的仍然是滿足構造出的哈夫曼樹具有相同的結構

附上**

#include

#include

#include

#include

#include

using

namespace std ;

typedef

long

long ll;

#define maxn 100005

#define inf 0x3f3f3f3f

#define mall (bithrnode *)malloc(sizeof(bithrnode));

typedef

struct

htnode,

*huffmantree;

void

select

(huffmantree ht,

int n,

int&x1,

int&x2)

// 查詢前n個結點的最小權值的下標下x1、x2;

}for

(int i=

1; i<=n;

++i)}}

void

creathuffmantree

(huffmantree &ht,

int n)

//順序建立哈夫曼樹

for(

int i=

1; i<=n;

++i)

scanf

("%d"

,&ht[i]

.weight)

;// 初始化完成

int s1, s2;

for(

int i=n+

1; i<=

2*n-1;

++i)

}void

print

(huffmantree ht,

int n)

}int

main()

資料結構 哈夫曼樹 哈夫曼編碼

哈夫曼樹又稱最優樹 二叉樹 是一類帶權路徑最短的樹。構造這種樹的演算法最早是由哈夫曼 huffman 1952年提出,這種樹在資訊檢索中很有用。結點之間的路徑長度 從乙個結點到另乙個結點之間的分支數目。樹的路徑長度 從樹的根到樹中每乙個結點的路徑長度之和。結點的帶權路徑長度 從該結點到樹根之間的路徑...

哈夫曼編碼 哈夫曼樹 (資料結構)

哈夫曼編碼,又稱霍夫曼編碼,是一種編碼方式,哈夫曼編碼是可變字長編碼 vlc 的一種。huffman於1952年提出一種編碼方法,該方法完全依據字元出現概率來構造異字頭的平均長度最短的碼字,有時稱之為最佳編碼,一般就叫做huffman編碼 有時也稱為霍夫曼編碼 include include inc...

資料結構 哈夫曼樹

哈夫曼樹是二叉樹的一種。被稱為最優二叉樹。實際應用中最重要的是帶權路徑長度。樹的路徑長度 樹中每個結點的路徑長度之和。權 附加在樹節點上,表示出現的概率。樹的帶權路徑長度 所有葉子結點帶權長度之和。看例項 的結點路徑長度 從d到 a的路徑,共走了兩條邊,所以為2。樹中的葉子結點有 d,e和 f。結點...