确定树是否是单一树的时间复杂度?

时间:2012-10-08 13:14:03

标签: algorithm data-structures binary-tree complexity-theory time-complexity

最近,我在二叉树上遇到了这个问题:

  
      
  1. 给定一些任意非平衡树,最大的是确定它是否为单值(所有元素都是相同的值)。

  2.   
  3. 在上述情况下会导致最大的O-complex,平衡   树或线性树?

  4.   

这是我对这个问题的回答:

  1. 要确定树是否是单一的,我们必须检查每个节点。因此,复杂性是O(n)。

  2. 如果它们具有相同数量的节点,它是线性树还是平衡树,则将进行相同数量的比较。因此,复杂性将是相同的。

  3. 这是对的吗?

1 个答案:

答案 0 :(得分:2)

如果给出任意二叉树,在最坏的情况下,您必须检查所有节点以确定它们是否具有相同的值。你可以在这里使用一个简单的对抗论证 - 如果你的算法没有查看所有的值,因为树中任何不同的值之间没有关系,对手可以给你一棵树n - 1个值都是相同的。如果你没有查看最后一个值,那么攻击者可以通过将该值设置为与算法相反的值来强制算法错误。

另一方面,如果您正在谈论二进制 搜索 树,那么您可以在时间O(h)中解决此问题,其中h是树的高度。具体来说,只需查看第一个和最后一个值,看看它们是否相同。如果是这样,树中的所有中间值必须相同。如果他们不是,那么您已经目睹了两个不同的价值观。这将在完美平衡树上的时间O(log n)和退化链表上的O(n)上运行。我怀疑这可能是原始问题的问题,因为它比一般的二叉树案例(至少在我看来)更有趣。

希望这有帮助!