问题描述
我们不使用二叉树,而是如何将四叉树存储到数组中。在二叉树中,我们通过从1-n编号节点将其存储到数组中,但是如何将四叉树(每个节点最多有四个子节点)存储到数组中?
解决方法
您可以使用的系统与二叉树基本相同。假设节点的子代具有特定位置,就像在二叉树中,子代是“左”还是“右”。对于可能是“最左”,“中左”,“中右”,“最右”的四叉树。名称并不重要,例如,只有一个命令,并且一个节点可以只有“ midleft”和“ farright”子代。
因此,从上到下迭代树的级别,用“空白”占位符填充空白。
这是一个示例树:
细小的边缘表明哪些孩子在“失踪”。
这棵树具有以下级别(缺少孩子的连字符)
- 级别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)。