二叉树搜索&跟踪

时间:2013-03-27 18:02:35

标签: c++ algorithm binary-tree huffman-code

我有一个包含整数和char的节点的二叉树。我正在研究霍夫曼编码,我想获得节点的二进制表示。每个左分支的字符串都附加一个'0',每个右分支都附加一个'1'。

我正在考虑搜索一个字符但是跟踪它的分支,如果它不在左边的节点中,删除附加到字符串的最后一个'0'并返回并检查右边。 这看起来非常有条理。还有另一种方法可以跟踪节点吗?

编辑: 我必须使用二叉树。

2 个答案:

答案 0 :(得分:2)

你在谈论编码霍夫曼输出吗?

您需要为每个可能的输入字符构建一个输出代码和长度表 - 不要在每个输入字符上遍历树。

答案 1 :(得分:2)

听起来像堆栈数据结构:

通过以这种方式使用堆栈,您可以跟踪您在树中的位置:

  • path = std::stack<int>
  • 向上移动到父== pop()
  • 转到左边的孩子== push(0)
  • 转移到右边的孩子== push(1)

编辑:

您可能希望实际使用std::vector<int>代替push_backpop_back。它仍然表现得像一个堆栈,但如果你使用一个向量,你可以得到最后的0和1的列表。