我有一个包含整数和char的节点的二叉树。我正在研究霍夫曼编码,我想获得节点的二进制表示。每个左分支的字符串都附加一个'0',每个右分支都附加一个'1'。
我正在考虑搜索一个字符但是跟踪它的分支,如果它不在左边的节点中,删除附加到字符串的最后一个'0'并返回并检查右边。 这看起来非常有条理。还有另一种方法可以跟踪节点吗?
编辑: 我必须使用二叉树。
答案 0 :(得分:2)
你在谈论编码霍夫曼输出吗?
您需要为每个可能的输入字符构建一个输出代码和长度表 - 不要在每个输入字符上遍历树。
答案 1 :(得分:2)
听起来像堆栈数据结构:
通过以这种方式使用堆栈,您可以跟踪您在树中的位置:
std::stack<int>
pop()
push(0)
push(1)
编辑:
您可能希望实际使用std::vector<int>
代替push_back
和pop_back
。它仍然表现得像一个堆栈,但如果你使用一个向量,你可以得到最后的0和1的列表。