在最简单的情况下,我有两个树(有向图),每个树节点都有一个唯一的id,并且可以有多个子节点,其中第二个树的所有叶子都包含在第一个树的叶子中。基于叶子,我想将第一棵树分成两棵树,使得新的第一棵树不包含原始第二棵树的任何叶子,而新的第二棵树将包含原始第二棵树的所有叶子。诀窍还在于,如果节点的所有子节点都将移动到新的第二个树,那么节点本身也应该被移动。
例如,对于这样的两棵树作为输入:
我想得到两棵新树,以便:
实现这一目标的最佳方法(算法)是什么?
从第一棵树中删除节点很简单,但是我有问题如何在适当的时候从第一棵树构建第二棵树重用节点。
我试图在Java 1.7版本中实现这种拆分(我不能使用1.8)。
我能够在下面的答案中提出一个解决方案,更多细节,但如果有人能提供更好的解决方案,我也会很高兴:)
答案 0 :(得分:0)
我想出了解决问题的方法,也许对某人有用。我的算法如下:
不确定我是否说得够清楚。如果没有检查BitBucket TreeSplitter上可用的implamantation。
此解决方案可能不是最佳解决方案,因此如果您有更好的方法将其作为答案发布。