2013-03-27 28 views
1

我有一个包含整数和char的节点的二叉树。我正在研究Huffman Coding,我想获得节点的二进制表示。每个左分支的字符串附加'0',每个右分支附加'1'。二叉树搜索和跟踪

我正在寻找一个字符但追踪它的分支,如果它不在左边的节点中,请删除附加到字符串的最后'0'并返回并检查是否正确。 这看起来很繁重。有没有另外一种方式让我跟踪节点?编辑: 我不得不使用二叉树。

+0

我的问题不清楚吗? – 2013-03-27 18:18:12

+0

真的是字符串?你不想把这些位作为实际位? – harold 2013-03-27 18:26:23

+0

哪一个会更好/更容易? – 2013-03-27 18:28:19

回答

2

听起来像一个堆栈数据结构:

你跟踪你在树枝上,通过以这种方式使用的堆栈:

  • path = std::stack<int>
  • 拉升父== pop()
  • 移动到左子== push(0)
  • 右移孩子== push(1)

编辑:

您可能需要实际使用std::vector<int>与改为push_backpop_back。它仍然像堆栈一样,但如果使用矢量,则可以在最后得到整个0和1的列表。

+0

那我该如何编码字符呢? 0为左边,1为右边。我怎样才能做到这一点?编辑:哦,我看到了... – 2013-03-27 18:25:57

+0

我编辑解释更多 – 2013-03-27 18:26:56

2

你说的是编码霍夫曼输出吗?

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

+0

我必须使用二叉树。看到这个链接http://en.wikipedia.org/wiki/File:N-ary_to_binary.svg char N将是0000 – 2013-03-27 18:22:09

+0

..对于第一棵树。假定在A的顶部有另一个节点。 – 2013-03-27 18:22:47

+0

右 - 你最初构建二叉树,但一旦你有了,你可以为每个字符建立一个输出码和长度表。这些应该都是二进制数据类型,而不是字符串。 – 2013-03-27 18:26:01