给定一组二叉树,选择一个子集,使其覆盖所有树

时间:2016-04-29 05:31:07

标签: algorithm binary-tree

我有一组二叉树。我需要找到它们的最小子集,以便覆盖所有树。通过覆盖我的意思是,如果有一个树A和一个树B使得B是A的子树,那么A覆盖B.通过最小子集我的意思是,在所有可以覆盖所有树的子集中,我们需要一个具有最小尺寸(尺寸=该组中的树数)。

1 个答案:

答案 0 :(得分:0)

怎么样:

1)按节点数对树进行排序。从节点最少的那个开始。

2)构建一个树比较器,它采用两个数据结构图。该比较器应该首先迭代两棵树中的较大树(递归地),寻找较小树中的顶部节点。如果找到:并排迭代直到找到差异(不匹配)或小树的末尾(MATCH)

3)将小树与其他树进行比较,直到第一次MATCH或直到所有其他树都被比较为止。 (开始比较你认为最有可能成为匹配的树)。如果没有匹配:该树必须在您的子集中。如果匹配:丢弃当前树,因为它在另一棵树中表示。

4)将第二个小树与所有较大的图等进行比较。