如何遍历哈夫曼树并获取所有符号的编码?
哈夫曼树遍历递归函数解析与实现
我写了一个递归函数用来遍历哈夫曼树,目的是生成包含所有符号编码的字符串。下面是具体的实现和逻辑说明:
函数代码
private void BypassLCR(HuffmanTree node, ref string result) { if (node.Symbol != '\0') { result += string.Format(" -> {0}| ", node.Symbol); return; } string last = result; result += "0"; BypassLCR(node.Left, ref result); last += "1"; result += last; BypassLCR(node.Right, ref result); }
关键逻辑说明
- 叶子节点判断:当节点的
Symbol属性不等于'\0'时(非叶子节点默认Symbol为'\0'),说明这是一个包含有效符号的叶子节点,此时会将符号格式化后追加到结果字符串中,然后返回结束当前递归分支。 - 非叶子节点处理:
- 先保存当前的结果字符串到临时变量
last中 - 给结果字符串追加
"0",代表遍历左子树的编码位,然后递归遍历左子节点 - 给之前保存的
last追加"1",代表遍历右子树的编码位,将这个新字符串追加到结果中 - 最后递归遍历右子节点
- 先保存当前的结果字符串到临时变量
这个函数通过递归的方式,沿着哈夫曼树的左右分支分别添加0和1的编码标识,最终把所有叶子节点的符号和对应的编码路径整合到结果字符串里。
内容的提问来源于stack exchange,提问作者J. Doe
相关产品推荐
相关产品推荐

