【问题标题】:Recursive Tree Traversal, returning a variable for each leaf of the tree递归树遍历,为树的每个叶子返回一个变量
【发布时间】:2013-02-25 18:58:31
【问题描述】:

我有一棵霍夫曼二叉树。我需要遍历树,直到到达每一片叶子,对于每一片叶子,我需要“保存”该叶子节点的一个成员,并将所有这些变量保存在树外的数组中。

假设我有这棵树:

            3\65

        6\-1

            3\70

    9\-1

            2\66

        3\-1

            1\67
16\-1

    7\68

每个叶子(7/68、1/67、2/66、7/70、3/65)都有一个名为“encoding”的成员,它是一个字符串。

(即每个节点都有一个node->left、node->right和node->encoding)

假设编码如下:

7/68 got an encoding of 0
1/67 got an encoding of 100
2/66 got an encoding of 101
3/70 got an encoding of 110
3/65 got an encoding of 111

我可以相对轻松地遍历树并打印出这些值,但我需要做的是将这些字符串保存在树外的数组中。

我想不出如何将这些保存在树外。

【问题讨论】:

    标签: c pointers tree tree-traversal huffman-code


    【解决方案1】:

    “将这些字符串保存在树外的数组中。”

    评论:你确定你必须存储字符串吗?如果您只存储整数并在递归完成后创建字符串,它会更干净。

    好的,无论哪种方式(并且不泄露源代码),您只需:

    • 在开始递归之前创建一个足够大 (*) 的数组

    • 创建一个用于写入数组不同部分的指针,将该指针初始化为数组的开头。

    将指向该指针的指针作为新的/附加的函数参数提供给您的递归。每次在递归中到达一个叶子时,你

    • 将您在叶子上找到的内容写入指针
    • 增加指针(你可以这样做,因为你有指向指针的指针

    【讨论】:

      【解决方案2】:

      据我所知,在霍夫曼代码实现中,您不必使用外部数组。实现它的最简单方法是将另一个指针('next')添加到您的结构中。 每个元素链接两次。一次作为树的成员,一次作为链表的成员。 这样就不需要新的结构了。

      【讨论】:

        猜你喜欢
        • 2018-07-12
        • 2014-03-11
        • 1970-01-01
        • 1970-01-01
        • 2022-01-25
        • 2017-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多