哈夫曼编码 (Swift实现)
func huffmanCode(_ &p: Node, _ numsLeafs: Int, _ &codes: String) {
//p为节点数组的指针,codes为string数组的指针
//parent表示父节点位置
let parent: Int = 0
//每次对一个叶子节点进行编码
//i表示当前叶子节点的位置
for i in 0..<numsLeafs {
//j表示当前节点位置,i是不能在下面循环中改变的
//使用j来记录节点的移动过程
let j: Int = i
//当前节点的父节点位置
parent = p[i].parent
//从当前叶子节点p[i]开始,找到哈夫曼树的根节点
//循环结束条件是此时parent为0,即到达哈夫曼树的根节点
while parent != -1 {
//如果当前节点是父节点的左子树,则此分支编码为0
if p[parent].left == j {
codes[i].push_back('0')
}else {
//如果当前节点是父节点的右子树,则此分支编码为1
codes[i].push_back('1')
}
j = parent
parent = p[j].parent
}
print(codes[i])
}
}