【问题标题】:Time complexity of determining whether a tree is a univalue tree?确定树是否为单值树的时间复杂度?
【发布时间】:2012-10-08 13:14:03
【问题描述】:

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

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

  2. 在上述情况下,这会导致最糟糕的大 O 复杂性,平衡 树还是线性树?

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

  1. 要确定一棵树是否是单值的,我们必须检查每个节点。所以,复杂度是 O(n)。

  2. 无论是线性树还是平衡树,如果它们具有相同数量的节点,就会有相同数量的比较。所以,复杂性是一样的。

这是正确的吗?

【问题讨论】:

  • 你是对的。这两种情况的复杂性都是线性的。

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


【解决方案1】:

如果给定一棵任意二叉树,在最坏的情况下,您必须检查所有节点以确定它们是否具有相同的值。您可以在这里使用一个简单的对抗性参数 - 如果您的算法不查看所有值,因为树中任何不同的值之间没有关系,对手可以为您提供 n - 1 个值都相同的树。如果您没有查看最后一个值,攻击者可能会将该值设置为与您的算法所说的相反,从而迫使您的算法出错。

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

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    相关资源
    最近更新 更多