哈夫曼编码
哈夫曼节点 |
父节点 |
左孩子left |
右孩子right |
权值weight |
现有1,3,2,4这四个节点
1.初始化(i=1---4)
节点1 | 节点2 | 节点3 | 节点4 |
父节点 0 | 父节点 0 | 父节点 0 | 父节点 0 |
左孩子left 0 | 左孩子left 0 | 左孩子left 0 | 左孩子left 0 |
右孩子right 0 | 右孩子right 0 | 右孩子right 0 | 右孩子right 0 |
权值weight 1 | 权值weight 3 | 权值weight 2 | 权值weight 4 |
2.选择其中最小的两个元素
条件(父节点等于0,及权值为最小的两个,个数>=2)
合并为新的节点5
节点1 | 节点3 | 节点5 |
父节点 5 | 父节点 5 | 父节点 0 |
左孩子left 0 | 左孩子left 0 | 左孩子left 1 |
右孩子right 0 | 右孩子right 0 | 右孩子right 3 |
权值weight 1 | 权值weight 2 | 权值weight 3 |
循环到最后一个为止
节点2 | 节点5 | 节点6 |
父节点 6 | 父节点 6 | 父节点 0 |
左孩子left 0 | 左孩子left 1 | 左孩子left 2 |
右孩子right 0 | 右孩子right 3 | 右孩子right 5 |
权值weight 3 | 权值weight 3 | 权值weight 6 |
节点4 | 节点6 | 节点7 |
父节点 7 | 父节点 7 | 父节点 0 |
左孩子left 0 | 左孩子left 2 | 左孩子left 4 |
右孩子right 0 | 右孩子right 5 | 右孩子right 6 |
权值weight 4 | 权值weight 6 | 权值weight 10 |
结束
输出,从叶子节点向根节点编码输出(条件父节点不为0,为0结束)
节点1->节点5->节点6->节点7
节点2->节点6->节点7
节点3->节点5->节点6->节点7
节点4->节点6->节点7
这样对照来写代码,思路就清楚很多了。