我们应该更喜欢使用二叉搜索树而不是 AVL 树有什么优势或特定情况吗?

问题描述

我们应该更喜欢使用二叉搜索树而不是 AVL 树有什么优势或特定情况。

解决方法

如果你不关心 lookup/insert/remove 操作的时间复杂度,那么 BST 就足够了。它更容易实现并且需要更少的空间。然而,在最坏的情况下,它的性能是 O(n) - 想象一下只向 BST 添加增加或减少的元素。

另一方面,如果您确实关心性能,那么您可以使用 AVL 树,因为它是一个自平衡 BST - 它的高度保证为 ~ log(n),其中 n 是树中的节点。这就是查找 lookup/insert/remove 操作是对数的原因。但是,AVL 树需要更多空间(每个节点都需要保留其 height),以及在违反此类属性时重新平衡树的额外逻辑。