将四叉树实现到数组中

Implementing a quad tree into an array

我们如何将四叉树存储到数组中,而不是使用二叉树。在二叉树中,我们通过从 1-n 对节点进行编号来将其存储到数组中,但是我们如何将四叉树(每个节点最多有四个子节点)存储到数组中?

对于二叉树,算法归结为 O(n-1/2)。对于具有 4 children 的“四叉树”,尝试 O(n-1/4).

您可以使用的系统与二叉树基本相同。假设一个节点的 children 有一个特定的位置,就像在二叉树中 child 不是“左”就是“右”。对于可能是“farleft”、“midleft”、“midright”、“farright”的 quad-tree。名称并不重要,只是有一个顺序,一个节点可能只有“中左”和“最右”children,例如。

然后从上到下迭代树的级别,用“空白”占位符填充空白。

这是一个示例树:

细小的边缘表示哪些children“缺失”。

这棵树有以下级别(缺少 children 的连字符)

  • 1 级:d
  • 2 级:kzne
  • 3 级:r-s-----qt------
  • 4 级:-ai--u--f-------

请注意,“缺失”children 的 children 没有占位符,因此,例如,级别 4 没有以某种方式与 z 或 e 节点相关的连字符。这与二叉树的原理相同。

这可以连接成一个字符串,后面的连字符可以省略:

dkzner-s-----qt-------ai--u--f

这可以编码为数组。例如在 JSON 表示法中:

["d", "k", "z", "n", "e", "r", null, "s", null, null, null, null, null, 
 "q", "t", null, null, null, null, null, null, null, "a", "i", null, null, 
 "u", null, null, "f"]

对于如何将其转回同一棵树,没有任何歧义。它本质上与在数组中编码二叉树的系统相同。