【问题标题】:Incomplete Binary Tree as Array不完全二叉树作为数组
【发布时间】:2017-07-17 09:06:28
【问题描述】:

在大学里,我们被问到如何将不完整的二叉树保存到数组中。 顶点的左孩子的索引为 2i+1,右孩子的索引为 2i+2。父节点的 floor((i - 1)/2)。 现在的第一个问题是我们将如何表示“缺失”的顶点。

我认为这可以通过将“null”保存到数组中来实现。有没有更好的解决方案?

第二个问题是我显然不知道该回答什么。有人问为什么没有人会真正这样做,如果我们从第一个问题中实现这样的问题,可能会出现严重的问题。

感谢您的帮助。

【问题讨论】:

  • 当你说你会使用“null”时,你是什么意思?对于从完整树中丢失的所有节点,还是只是丢失子树的根节点?前者更简单,但可能比表示不完整树所需的内存要多得多;后者更复杂,但占用的空间与树中实际的节点数成正比。

标签: arrays tree theory


【解决方案1】:

如何表示缺失顶点的答案取决于您的语言。在 Java 中,如果您的数组是 Objects 之一,那么您当然可以使用 null。如果它是一个基元数组,那么您需要某种可以表示 null 的哨兵值。如前所述,使用数组来表示不完整的二叉树可能会很浪费,具体取决于树的结构。

第二个问题的答案可能就是上面的内存问题。话虽如此,还有其他方法可以将不完整的树存储在对内存的滥用较少的数组中,但它们比简单的“2i+1 处的左孩子和 2i+2 处的右孩子”更复杂。

【讨论】:

  • 你能详细说明更复杂的版本吗?我见过this question,它展示了一种有趣的方式,即基本上将子节点向前移动以填充缺失节点留下的空洞。它节省了空间,但似乎需要拆包才能穿越。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
  • 2015-08-17
  • 2020-08-24
相关资源
最近更新 更多