一、二叉搜索树的效率
- 平均情况下,二叉搜索树进行搜索的时间复杂度为O(lgn)。
- 最坏情况下,二叉搜索树可能非常偏斜。(如下图所示)
- 解决方法:
- 随机化插入
- AVL树
二、AVL树
- AVL树是一棵自平衡的二叉树
- AVL树具有以下性质:
- 根的左右子树的高度之差的绝对值不能超过1
- 根的左右子树都是平衡二叉树(满足上面的条件)
上图中的balance factor (平衡因子)指的是该节点左右子树的高度差。(右子树高度-左子树高度)
因为AVL树满足根的左右子树都是平衡二叉树,进行查找删除的操作时大致为一半一半的情况,因此一定不会出现极偏的情况。
三、AVL树的旋转
- 插入一个节点可能会造成破坏AVL树的平衡,可以通过旋转操作来进行修正。
- 插入一个节点后,只有从插入节点到根节点的路径上的节点的平衡