Javascript 如何从叶节点的一组路径片段构建树

Javascript 如何从叶节点的一组路径片段构建树,javascript,algorithm,tree,Javascript,Algorithm,Tree,我正在寻找一种算法来构造一个可能的自顶向下的树结构,当唯一的输入数据是叶节点的路径决策(以随机顺序)时 如果叶节点已通过该节点,则用[nodeID]+标记路径决策,如果叶节点未通过该节点,则用[nodeID]-标记路径决策。输入示例: 上述示例输入中的一种可能的树结构是: 输出应该是节点列表和节点各自的父节点,如下所示: 正如您所见,每个叶节点的可能位置并不限于一个,因为输入数据不是完整的路径。示例中的Leaf1可以是节点D或节点I的子节点 可以有任意数量的叶从中获取路径数据,但每个叶只有

我正在寻找一种算法来构造一个可能的自顶向下的树结构,当唯一的输入数据是叶节点的路径决策(以随机顺序)时

如果叶节点已通过该节点,则用[nodeID]+标记路径决策,如果叶节点未通过该节点,则用[nodeID]-标记路径决策。输入示例:

上述示例输入中的一种可能的树结构是:

输出应该是节点列表和节点各自的父节点,如下所示:

正如您所见,每个叶节点的可能位置并不限于一个,因为输入数据不是完整的路径。示例中的Leaf1可以是节点D或节点I的子节点

可以有任意数量的叶从中获取路径数据,但每个叶只有一行路径数据。可能有一些叶子你根本没有从中获得任何数据,你也不知道树中有多少叶子。路径数据中提到的所有节点都应该出现在输出表中,并且只有计算出的根不应该分配任何父节点

我想我们必须以某种方式结合每个叶路径的事实,比如从叶1中你知道:A和E不能在平行线上,从叶2中你知道A和我不能在平行线上,等等


更可取的javascript,但其他语言或伪代码也受到欢迎

既然没有人回答,我就给你一些想法

您可以从以下内容开始:

1: [A+, E+, H-]
2: [B-, A+, I+, D-]
3: [K+, G+, E+, C-]
4: [H+, A-, G-]
首先,搜索只显示+的节点。把这些根扎起来。扫描这个,我们可以对节点
E
I
K
执行该操作。因此,我们的答案首先是:

E
E I
I K
我们的路径数据简化为:

1: [A+, H-]
2: [B-, A+, D-]
3: [G+, C-]
4: [H+, A-, G-]
现在我们有了一个分区操作。为此,我们制作了一个图,其中两个节点连接在一起,如果它们与a+一起出现。然后,我们通过连接的组件来分离节点,并将叶子分离到有+的分区中(任何没有分区的叶子都可以在树中成为叶子,然后丢弃)。删除任何-由此分离处理。在我们的例子中,这是一个完全断开连接的图,它将每个节点放入自己的分区中,并将路径数据分成3组(注意,我们丢失了所有规则,这些规则由分区来解释):

现在我们解决了每个问题,得出了以下最终解决方案:

E
E I
I K
K A
K B
K C
K D
K G
K H

我相信这种方法只会在没有树的情况下无法取得进展。如果要找到一棵树,它将找到一棵。

每个叶最多有一个输入行,还是可以有多个输入行对应于同一个叶?@tucuxi是的,每个叶最多有一行。在您的示例中,您没有显示任何叶节点,并且至少需要有5个叶节点。但你有4年的数据。您的数据应该是部分叶节点的数据,还是全部叶节点的数据?@b实际上,可以使用4个叶节点的碎片路径信息构建许多不同的可能树。我只展示了一个可能的“解决方案”。叶子应该位于末端节点的下方,在本例中,只有4个,而不是5个。我需要一个算法,建立一个树结构,其中所有的叶路径是有效的。在本例中,只有4条路径。输入表和导出表是唯一重要的东西(树只用于可视化)。有4个以上的叶子,但只有来自4个叶子的路径数据。非常有趣的解决方案似乎可以工作!太好了,谢谢!
E
E I
I K
K A
K B
K C
K D
K G
K H