BST时间复杂度

时间:2016-10-19 07:49:31

标签: time-complexity binary-search-tree

假设T是具有n个节点和高度h的二叉搜索树。 T的每个节点x存储a 实数x.Key。给出以下算法Func1(T.root)的最坏情况时间复杂度。您 需要证明你的答案。

Func 1 (x) 
    if (x == NIL) return 0; 
    s1 <- Func1(x.left()); 

    if (s1 < 100) then
       s2 <- Func1(x.Right());
    end
    else
       s2 <- 0; 
    end

    s <- s1 + s2 + x.Key(); 
    return (s); 

x.left()&amp; x.right()返回节点x的左右子节点 x.key()返回存储在节点x

的密钥

对于最坏的情况运行时,我认为这将是O(树的高度),因为这基本上像最小()或最大()二叉搜索树算法。但是,它是递归的,所以我有点犹豫是否真的将O(h)写为最坏情况的运行时。

当我考虑它时,最糟糕的情况是如果函数为每个x.left执行if(s1&lt; 100)语句,这意味着每个节点都被访问,那么这将使运行时间为O (n)的

1 个答案:

答案 0 :(得分:0)

这是正确的,这个函数的最坏情况运行时是Θ(n),如果if语句总是执行,就会发生这种情况。在这种情况下,递归访问每个节点,递归访问完整的右子树,然后递归访问完整的左子树。 (它还为每个节点执行O(1)工作,这就是为什么总和为O(n))。