Arrays 在数组中实现四叉树

Arrays 在数组中实现四叉树,arrays,algorithm,quadtree,Arrays,Algorithm,Quadtree,我们如何将四叉树存储到数组中,而不是使用二叉树。在二叉树中,我们通过从1-n对节点进行编号将其存储到数组中,但是如何将四叉树(每个节点最多有四个子节点)存储到数组中?对于二叉树,算法归结为O(n-1/2)。对于有4个子树的“四叉树”,请尝试O(n-1/4)。可以使用的系统与二叉树基本相同。假设一个节点的子节点有一个特定的位置,就像二叉树中的子节点是“左”或“右”。对于四叉树,可以是“远左”、“中左”、“中右”、“远右”。名称其实并不重要,只是存在一个顺序,例如,一个节点只能有“midleft”和

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

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

可以使用的系统与二叉树基本相同。假设一个节点的子节点有一个特定的位置,就像二叉树中的子节点是“左”或“右”。对于四叉树,可以是“远左”、“中左”、“中右”、“远右”。名称其实并不重要,只是存在一个顺序,例如,一个节点只能有“midleft”和“farright”子节点

然后从上到下迭代树的各个层次,用“空白”占位符填充空白

下面是一个示例树:

微小的边缘表示哪些孩子“失踪”

此树具有以下级别(缺少子级的连字符)

  • 一级:
    d
  • 第二级:
    kzne
  • 三级:
    r-s-----qt------
  • 第四级:
    -ai--u--f------
请注意,“缺少”子节点的子节点没有占位符,因此,例如,级别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"]
关于如何将其转换回同一棵树,没有任何含糊不清的地方。它本质上与在数组中编码二叉树的系统相同