我想从一个非常不寻常的输入构建一个二叉树。输入包含:
节点总数。
根的整数标签。
所有边(相互连接的顶点/节点)的列表。列表中的边是未排序的,只有一个规则用于确定左/右子元素 - 列表中第一个出现的边中的子元素始终位于左侧。顶点对中子/父的顺序也是随机的。
我提出了一些简单的解决方案,但它们需要对所有边的列表进行多次搜索(我基本上会找到其中有标记根的 2 条边,并对所有子树重复此过程。)
我想这种简单的方法对于具有大量节点的树来说效率非常低,但我想不出其他的办法。
有什么更有效的算法来解决这个问题的想法吗?
这是一个更好的可视化示例:
输入:5 个节点,根标记为 2,边列表:[(1,0),(1,2),(2,3),(1,4)]
这棵树看起来像这样:
2
1 3
0 4
Run Code Online (Sandbox Code Playgroud) 让我们将邻域限制为 n=1(这意味着我们始终需要 3 个单元来评估下一代单元)。
下面是 2 状态规则的示例。请注意,上面一行的规则是按特定顺序生成的,而下面一行是数字 30 的位表示。
我找不到 3 状态 CA 的等效可视化。按照 2 状态 CA 的逻辑,它应该包含 27 种可能的结果,但我不知道它们应该按什么顺序生成。下面一行应该是三进制的 30(前导零总共占据 27 个位置)。
是否有一个通用算法可以按照 CA 的常规顺序生成这些排列(无论状态数量如何)?
提前非常感谢您,如果问题很愚蠢,我们深表歉意。:(