Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有一个包含整数和字符的节点二叉树。我正在研究霍夫曼编码,我想获得节点的二进制表示。'0' 被附加到每个左分支的字符串中,'1' 被附加到每个右分支。
我正在考虑搜索 char 但跟踪其分支,如果它不在左侧节点中,请删除附加到字符串的最后一个 '0' 并返回并检查右侧。这看起来非常有任务。我还有其他方法可以跟踪节点吗?
编辑:我必须使用二叉树。
您是在谈论对霍夫曼输出进行编码吗?
您需要为每个可能的输入字符构建输出代码和长度表 - 不要遍历每个输入字符的树。
听起来像一个堆栈数据结构:
您可以通过以下方式使用堆栈来跟踪您在树中的位置:
std::stack<int>
pop()
push(0)
push(1)
编辑:
您可能希望实际使用std::vector<int>with push_backandpop_back来代替。它仍然表现得像一个堆栈,但如果你使用向量,你可以在最后得到整个 0 和 1 的列表。
std::vector<int>
push_back
pop_back