递归树遍历,为树的每个叶子返回一个变量

时间:2013-02-25 18:58:32

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

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

假设我有这棵树:

            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”的成员,它是一个字符串。

(即每个节点都有一个节点 - >左,节点 - >右,节点 - >编码)

让我们说编码如下:

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

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

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

2 个答案:

答案 0 :(得分:0)

  

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

评论:你确定你必须存储字符串吗?如果只是存储整数并在递归完成后创建字符串,那就更清晰了。

好的,无论如何(并且没有提供源代码)你只是:

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

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

将指针指向您的递归作为新的/附加函数参数。每次在递归中到达叶子

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

答案 1 :(得分:0)

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