【问题标题】:How to turn char array into BST?如何将 char 数组转换为 BST?
【发布时间】: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


【解决方案1】:

我很确定这需要更改:

else if(topology[index] == '1')
{
    HuffNode* endbranch = create_HuffNode(topology[index+1], true);
    return NULL;
}

到这里:

else if(topology[index] == '1')
{
    HuffNode* endbranch = create_HuffNode(topology[index+1], true);
    return endbranch;
}

您遇到的另一个问题是这些语句对:

    HuffNode*  left = build_Tree(topology, index + 1, nodes_written + 1, sz);
    HuffNode*  right = build_Tree(topology, index + 1, nodes_written + 1, sz);

因为您将相同的参数传递给build_Tree,所以您的左右节点将相同。你需要你的左树解析返回一些东西(out 参数)来指示它解析了多少个节点,这样你就可以将正确的起始索引传递给对 build_Tree 的第二次调用。

【讨论】:

  • 感谢您的帮助!第一部分部分修复了它,我终于有了一些左右相同的打印,但是在尝试创建新的输出参数时遇到了问题。我创建了一个新参数,每次输入 if(=='0') 并将其添加到索引时都会更新 1,但这会杀死打印,然后我遇到了同样的问题,因为我没有'不知道如何更新 if(=='1') 块中的参数。
猜你喜欢
  • 2021-08-19
  • 2011-06-08
  • 2022-01-22
  • 2015-11-25
  • 2013-06-06
  • 2016-03-10
  • 2017-03-05
  • 2021-10-15
相关资源
最近更新 更多