假设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)的
答案 0 :(得分:0)
这是正确的,这个函数的最坏情况运行时是Θ(n),如果if语句总是执行,就会发生这种情况。在这种情况下,递归访问每个节点,递归访问完整的右子树,然后递归访问完整的左子树。 (它还为每个节点执行O(1)工作,这就是为什么总和为O(n))。