【发布时间】:2014-01-15 23:32:34
【问题描述】:
所以我有两到三棵树,它们是在执行某些代码期间生成的。这棵树的每个节点都具有这样的属性,即它将具有最少 0 个子节点到最多 8 个子节点。所以我猜你可以得到这种完整树的图片,它在 0 级有一个根节点。在级别 1 8 个节点,在级别 2 64 个节点,依此类推。父节点的每个子节点编号从 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 的节点相同,而不管它具有的子节点数量或子节点是否相同。
因此,为了直观地陈述我在第二段中提到的内容,以确保没有歧义,我还附上了这三个图表。前两个合并得到第三棵树。
并且请我在世界上拥有所有时间来制作这个,这是出于个人目的,我正在尝试在这里学习一些东西,所以请不要推荐任何图书馆。
我正在考虑的解决方案包括为每棵树创建一个队列,并对这三棵树进行级别顺序遍历,并将遇到的节点添加到队列中。在我开始添加给定节点的子节点之前,我看到了这三个队列的共同点!我在结果树中设置了公共部分节点。但我想知道是否有比这更有效的解决方案。
【问题讨论】:
-
A -1 并且没有提到他为什么给我一个 -1 :|这个问题有什么歧义吗?我是否遗漏了任何重要信息?我是否在错误的堆栈交换站点上发布了这个?这是一个编程问题,我想不出它应该得到 -1 的任何理由!
-
问题对我来说似乎没问题。遍历左边的树,你只是想找到两组孩子的公共部分([4, 5, 6] + [1, 2, 3, 4, 5, 6] = [4, 5, 6])? stackoverflow.com/questions/2851938/…
-
这正是我想通过图中突出显示@zapl 的问题。你看到集合 A 中的 [4,5,6] 可能与第二组中的 [4,5,6] 相同,也可能不同。如果他们来自同一个父母,他们是相同的。现在我也可以将父 ID 存储在节点中。所以它将是 [4-4,4-5,4-6,5-1,5-2,5-3] 和 [4-1,4-2,4-3,4-4,4-5 ,4-6]但是对于 8 个级别,这棵树占用了 33MB 的内存。所以一个节点上额外的 32 位长指针将使它成为 66mb !
-
每个节点可以有一个
Set或Node作为子节点。只需找到一个匹配节点,与集合相交并递归到剩余的子节点。 -
发布此链接和链接,我将接受它作为解决方案。
标签: java algorithm data-structures tree