【问题标题】:Calculating big O for a binary tree: there is a custom tag for each node计算二叉树的大 O:每个节点都有一个自定义标签
【发布时间】:2017-03-19 05:52:56
【问题描述】:

我有一个带有n 节点的二叉树。这棵树不一定是平衡的。

对于树的每个节点,我将其左子树的节点总数倒数为nL,然后我将其右子树的节点总数倒数为nR .然后我计算min(nL,nR),然后将最小值作为标签分配给节点。我重复这个过程,为树的所有节点生成适当的标签。

现在我打算计算 sum of all the tags 的大 O。我的意思是,我很想知道sum of tags 是在 O(nlog(n)) 还是 O(n) 还是 O(n2)


在最平衡的情况下,二叉树只是一个如下图的日志列表。在这种情况下,我认为sum of tags 将是0,因此大 O 将是 O(0)


在完美二叉树的情况下,根节点的标签可能是 20(n/20+1) 并且在下一级,即根的左右孩子,标签的总和可能是 21(n/21+1) 并且对于完美二叉树的第 i 层,标签的总和可能是 2i(n/2i+1)

在第 i 个级别,标签的总和可能变为 2i(n/2i+1)=n/2 因此看起来有些标签每个级别可能是 n/2 并且因为完美二进制三的总高度为 log2n 因此标签的总和可能是 (n/2)log2n 这意味着对于一棵完美的二叉树,标签总和的大 O 可能是 O(nlog2n)


现在我不确定我的上述计算是否正确。我想知道是否有人可以提供帮助。

【问题讨论】:

标签: algorithm data-structures tree binary-tree


【解决方案1】:

由于二叉树中的每个节点都有一个自定义标签,因此您的算法必须访问树的所有节点一次才能计算所有标签的总和。

因此,运行时间为 O(n)。

而且你所有其他的计算都是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    相关资源
    最近更新 更多