将四叉树实现到数组中

问题描述

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

解决方法

您可以使用的系统与二叉树基本相同。假设节点的子代具有特定位置,就像在二叉树中,子代是“左”还是“右”。对于可能是“最左”,“中左”,“中右”,“最右”的四叉树。名称并不重要,例如,只有一个命令,并且一个节点可以只有“ midleft”和“ farright”子代。

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

这是一个示例树:

enter image description here

细小的边缘表明哪些孩子在“失踪”。

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

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

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

可以将其连接为一个字符串,并且可以省略结尾的连字符:

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

可以将其编码为数组。例如JSON表示法:

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

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

,

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