哈夫曼树

带权叶子构成森林,每轮取权值最小的两棵树合并(根权为两权之和),n 个叶子合并 n-1 次后 只剩一棵树——哈夫曼树。它让带权路径长度 WPL 最小:权大的叶子离根近、权小的离根远, 是哈夫曼编码(前缀编码)的基础。

哈夫曼树
01 / 13 步
森林初始:4 2 7 5 9 共 5 棵单结点树。要合并 4 次。 比较 0 · 交换 0
伪代码

				
					
					1
					procedure HuffmanTree(w, n)
				
			
				
					
					2
					  for i = 1 to n do 创建叶子 F[i],权 w[i]
				
			
				
					
					3
					  for k = 1 to n - 1 do
				
			
				
					
					4
					    从 F 中选权最小的两棵树 i, j
				
			
				
					
					5
					    合并为新树 t,权 = w[i] + w[j]
				
			
				
					
					6
					    t 的左孩子 = i,右孩子 = j
				
			
				
					
					7
					    删去 i, j,t 加入 F
				
			
				
					
					8
					  end for
				
			
				
					
					9
					  return F 中唯一的树          // 哈夫曼树
				
			
				
					
					10
					WPL = Σ 叶子权 × 路径长度
				
			
01 / 13
速度