我是计算机科学大学的新生,所以请给我一个可以理解的理由。
我有一个由高度平衡的二叉树,它有635个节点。在最坏的情况下会发生什么比较?为什么?
答案 0 :(得分:5)
这是考虑这一点的一种方式。每次在二叉搜索树中进行比较时,都会发生以下情况之一:
这里的关键观察是,在每一步之后,你要么终止(耶!),要么在树的下方下降。在每个点上,您进行一次比较。由于你不能永远下降,你只能做很多比较 - 具体来说,如果树有高度h,你可以做的最大比较数是h + 1,如果你每个级别进行一次比较就会发生这种情况。
在你的问题中,你得到的是你有一个635个节点的平衡二叉搜索树。在这种情况下,“平衡”意味着什么并不是100%明确,因为有许多不同的方法来确定树是否平衡并且它们都导致不同的树高。我将假设你被赋予complete binary search tree,其中除了最后一个级别之外的所有级别都被填充。
这一点很重要的原因是,如果你有一个高度为h的完整二进制搜索树,它最多可以有2个 h + 1 - 1个节点。如果我们尝试根据节点数求解树的高度,我们得到:
n = 2 h + 1 - 1
n + 1 = 2 h + 1
lg(n + 1)= h + 1
lg(n + 1) - 1 = h
因此,如果您有节点数n,则可以确定包含n个节点的完整二叉搜索树的最小高度。在你的情况下,n = 635,所以我们得到
lg(635 + 1) - 1 = h
lg(636) - 1 = h
9.312882955 - 1 = h
8.312882955 = h
因此,树的高度为8.312882955。当然,树木不能具有分数高度,因此我们可以采取天花板来发现树的高度为9.由于最大比较数为h + 1,因此在进行时最多进行10次比较查找。
希望这有帮助!
答案 1 :(得分:0)
不失一般性,你可以说最大数量没有。比较将是BST的高度...您不必访问节点中的每个节点,因为每次比较都会让您更接近节点...
答案 2 :(得分:0)
假设它是一个平衡的BST(除了最后一个节点之外的所有节点都有2个子节点)。
例如,
0级 - >高度1 - >节点数= 1
1级 - >高度2 - >节点数= 2
2级 - >高度3 - >节点数= 3
3级 - >高度4 - >节点数= 8
......
......
等级n - >高度n + 1 - >节点数= 2 ^ n或2 ^(h-1)
使用上述逻辑,您可以获得最佳,最差或平均情况的搜索时间。