我有一个函数,它应该告诉给定的二叉树A是否包含给定的二叉树B.该函数将“包含”定义为“A由B覆盖,或任何完整的B子树”。例如,如果树A是空树而树B不是,那么A是否会包含在B中?如果它们都是空的呢?
谢谢!
答案 0 :(得分:3)
在数学意义上,空集(树只是集合的特化)包含在包括其他空集的每个其他集合中。
对你的两个问题都是如此。
空集甚至还有它的wiki:http://en.wikipedia.org/wiki/Empty_set
无论如何,从您的实现中可以明显看出空树包含在每个其他树中,示例实现将如下所示:
bool Tree::contains(const Tree& otherTree)
{
for (n: otherTree)
{
if (!contains(n))
return false;
}
return true;
}
当然,我可以想象更好的实现,特别是在树被排序时 - 但关键是如果for(n: otherTree)
不会导致迭代,那么结果为真。