我有一组二叉树。我需要找到它们的最小子集,以便覆盖所有树。通过覆盖我的意思是,如果有一个树A和一个树B使得B是A的子树,那么A覆盖B.通过最小子集我的意思是,在所有可以覆盖所有树的子集中,我们需要一个具有最小尺寸(尺寸=该组中的树数)。
答案 0 :(得分:0)
怎么样:
1)按节点数对树进行排序。从节点最少的那个开始。
2)构建一个树比较器,它采用两个数据结构图。该比较器应该首先迭代两棵树中的较大树(递归地),寻找较小树中的顶部节点。如果找到:并排迭代直到找到差异(不匹配)或小树的末尾(MATCH)
3)将小树与其他树进行比较,直到第一次MATCH或直到所有其他树都被比较为止。 (开始比较你认为最有可能成为匹配的树)。如果没有匹配:该树必须在您的子集中。如果匹配:丢弃当前树,因为它在另一棵树中表示。
4)将第二个小树与所有较大的图等进行比较。