【发布时间】:2020-03-19 10:33:25
【问题描述】:
给定一些文本文件,我需要读取每个字母数字字符并使用Huffman's algorithm.对其进行编码
解决了读取字符、存储概率和创建节点以及使用指针创建霍夫曼特里树的问题。
但是,我需要使用二叉树的顺序表示来创建和初始化霍夫曼树,而不需要任何指针。
这可以通过使用指针创建一个常规树然后将其读入数组来完成,但我的目标是直接用节点填充一个数组。
我考虑创建较小的树并将它们合并在一起,但选择了矩阵表示,我将从二进制堆中收集具有最小概率的元素并将它们存储到矩阵的行中,其中矩阵的行将表示级别哪个节点应该在二叉树中,顺序相反。
E.g. Given characters and their probabilities as char[int] pairs.
a[1], b[1], c[2], d[1], e[3], f[11], g[2]
I aim to create matrix that looks like
____________________________________
a | b | d | g |
____________________________________
ab | c | dg | e |
____________________________________
abc | deg | | |
____________________________________
abcdeg | f | | |
____________________________________
abcdefg | | | |
____________________________________
Where levels of a, b, c, d, e & f would be rows of a matrix.
目前,我被困在如何在元素的“父级”移动时递归增加元素的级别(如果我将来自不同级别 ['ab' 和 'c'] 的两个节点组合在一起,我很容易等于级别c 与 ab 并解决问题,但如果例如 'c' 和 'd' 都在第二行)以及如何创建完整的二叉树(如果它有左子,它需要有右子)只有终端节点的级别。
事先,我知道这个问题不是很具体,如果有另一种方法来解决这个问题,而不是仅仅解决提到的问题,我将不胜感激。
【问题讨论】:
标签: c algorithm data-structures binary-tree huffman-code