遍历霍夫曼树

Posted

技术标签:

【中文标题】遍历霍夫曼树【英文标题】:Traversing a Huffman Tree 【发布时间】:2011-10-12 04:18:37 【问题描述】:

所以目前我有一个创建霍夫曼树的程序。树由具有以下字段的“Hnodes”组成: 右(指向右孩子) 左(指向左孩子) 代码(整数字符串,理想情况下,0 和 1 将成为该节点的霍夫曼代码) 字符(节点中包含的字符)。

我通过从链表中添加节点来创建霍夫曼树 - 我知道树是正确创建的。当我创建树时,我告诉节点,当我给它一个父节点时,如果它是父节点的“右”,它的代码字符串是 1,如果左 0。但是显然在创建整个树之后,每个节点都是只会有 0 或 1,但还没有像 00100101 这样的字符串。我的问题是,现在我有了这棵树,我可以遍历它吗?我理解这个想法是给每个孩子它的父母的代码+孩子自己的代码,但我不明白如何循环遍历树来完成这个。

提前谢谢你。

【问题讨论】:

您的代码示例以及您尝试解决此问题的方法会有所帮助。 发布您的代码,如果这是家庭作业,也需要适当标记:)。 【参考方案1】:

也许是这个?

  ExpandBinaryPaths(node, prefix)
  1. if node is null then return 
  2. else then
  3.    node.binary = prefix concat node.binary
  4.    ExpandBinaryPaths(node.left, node.binary)
  5.    ExpandBinaryPaths(node.right, node.binary)
  6.    return

这个想法是你可以在没有前缀的根上调用它... ExpandBinaryPaths(root, "")。

【讨论】:

以上是关于遍历霍夫曼树的主要内容,如果未能解决你的问题,请参考以下文章

创建赫夫曼树详解

数据结构树与树的表示二叉树存储结构及其遍历二叉搜索树平衡二叉树堆哈夫曼树与哈夫曼编码集合及其运算

第五章小结

哈夫曼编码

数据结构-----哈夫曼树的构造以及遍历

数据结构(赫夫曼树)