0
点赞
收藏
分享

微信扫一扫

哈夫曼编码(Swift实现)

得一道人 2022-05-03 阅读 67

哈夫曼编码 (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])
    }
}
举报

相关推荐

0 条评论