如何通过仅保留所有树共有的节点来合并多个树

时间:2014-01-15 23:32:34

标签: java algorithm data-structures tree

所以我在执行某些代码时生成了两到三棵树。此树的每个节点都具有此属性,它最少有0个子节点,最多8个子节点。所以我想你能够得到这种完整树的图片,它在0级是一个单根节点。在级别为2的64个节点处的级别1 8个节点,依此类推。父节点的每个子节点都编号为0到7,我将它们作为java中的字节整数类型存储在它们中,顺便说一下我在java中创建它。

现在我需要将这两个合并到我生成的三个树中,并且我完全无视给定节点的子节点。如果在三级树的级别上说在级别1,如果树1有4,5,6并且树2有5,6,7而树3有2,5,6我的结果树应该有5,6,因为它这三棵树都很常见。我不担心树1的第5个节点是否有4个子节点,并且树2中该级别的第5个节点有3个子节点。如果一个节点在一个级别标记为5,则假设它与在不同树中同一级别标记为5的节点相同,而不管它具有的子节点数或者子节点是否相同。

所以为了说明我在第二段中所提到的内容,以确保没有歧义我也附上这三个图。前两个被合并以提供第三个树。enter image description here

请我在这个世界上一直都有这个,这是出于个人目的,我想在这里学到一些东西,所以请不要建议任何图书馆。

我想到的解决方案涉及每个树的单个队列,并在这三个树上进行级别顺序遍历,并将我遇到的节点添加到队列中。在我开始添加给定节点的子节点之前,我看到这三个队列的共同点是什么!我在结果树中设置公共部分节点。但我想知道是否有一种比这更有效的解决方案。

1 个答案:

答案 0 :(得分:1)

假设两种情况下树和子节点的相对顺序相同,您可以使用简单的递归算法将树合并在一起:

  • 将空树和任何树合并在一起会产生空树。
  • 将具有不同根的树合并在一起会产生空树。
  • 将具有相同根r和子c 1 ,...,c n 和d 1 的两棵树合并在一起,... 。,d n 是通过生成一个新的树来完成的,该树的根r为子节点c i / d j 对c i 和d i 具有相同的根值。

希望这有帮助!