【发布时间】:2021-05-30 16:23:52
【问题描述】:
我目前正在尝试将 char 数组转换为 Huffman 树。例如char数组为{0,0,1,a,1,b,0,0,1,c,1,d},每个0对应一个分支节点,每个1对应一个叶子节点, 1 之后的字符是存储在叶节点中的值,如下所示:Preorder Tree。我知道这必须递归完成,但我对递归逻辑感到困惑。 每个节点结构都包含一个 char 值、一个检查节点是否为叶节点的 bool 以及一个左右节点结构。
HuffNode* build_Tree(char* topology, int index, int nodes_written, int sz)
{
if(nodes_written == sz)
{
return NULL;
}
if(topology[index] == '0')
{
HuffNode* left = build_Tree(topology, index + 1, nodes_written + 1, sz);
HuffNode* right = build_Tree(topology, index + 1, nodes_written + 1, sz);
HuffNode* newnode = create_HuffNode(0, false);
newnode->left = left;
newnode->right = right;
return newnode;
}
else if(topology[index] == '1')
{
HuffNode* endbranch = create_HuffNode(topology[index+1], true);
return NULL;
}
return NULL;
}
我这样称呼它:
HuffNode* full_tree = build_Tree(actual_char_Topology, 0, 0, sz);
来自另一个函数,但是当我尝试打印出 full_tree 时,那里什么都没有。 当我点击“1”时,我想我对 index 和 sz 会发生什么感到困惑,任何建议都将不胜感激!
【问题讨论】:
-
仅在某些情况下:create_HuffNode 只是 malloc 并分配值,这工作正常。我想从数组中删除所有 1 是否会使递归更容易,但这会产生“0”是一个完全有效的叶节点值的问题,这会使事情复杂化。
标签: arrays c binary-search-tree huffman-code preorder