二进制树包含其他二叉树

时间:2012-09-30 01:21:47

标签: c++ binary-tree

我有一个函数,它应该告诉给定的二叉树A是否包含给定的二叉树B.该函数将“包含”定义为“A由B覆盖,或任何完整的B子树”。例如,如果树A是空树而树B不是,那么A是否会包含在B中?如果它们都是空的呢?

谢谢!

1 个答案:

答案 0 :(得分:3)

在数学意义上,空集(树只是集合的特化)包含在包括其他空集的每个其他集合中。

对你的两个问题都是如此。

空集甚至还有它的wiki:http://en.wikipedia.org/wiki/Empty_set

enter image description here


无论如何,从您的实现中可以明显看出空树包含在每个其他树中,示例实现将如下所示:

bool Tree::contains(const Tree& otherTree)
{
   for (n: otherTree)
   {
      if (!contains(n)) 
         return false;
   }
   return true;
} 

当然,我可以想象更好的实现,特别是在树被排序时 - 但关键是如果for(n: otherTree)不会导致迭代,那么结果为真。