平衡树学习笔记
全称“平衡二叉搜索树”
二叉搜索树(BST)
二叉搜索树是一种节点值之间具有一定数量级次序的二叉树。
性质:一个节点x左子树所有点的关键字都比x的关键字小,右子树所有点的关键字都比x的关键字大
二叉搜索树很多时候用来进行数据查找。这个过程从树的根结点开始,沿着一条简单路径一直向下,直到找到数据或者得到空值。
通常查询等操作的时间复杂度为
平衡树
二叉搜索树一定程度上可以提高搜索效率,但是当原序列有序时,依据序列构造的二叉搜索树为右斜树。此时二叉树退化成单链表,搜索效率降低为 O(n)。
二叉搜索树的查找效率取决于树的高度,因此保持树的高度最小,即可保证树的查找效率。
节点数目一定,保持树的左右两端保持平衡,树的查找效率最高。
这种左右子树的高度相差不超过 1 的树为平衡二叉树。
平衡树具有如下特点:
-
具有二叉查找树的全部特性。
-
每个节点的左子树和右子树的高度差至多等于1。
通过平衡树,我们解决了二叉查找树的缺点。对于有 n 个节点的平衡树,最坏的查找时间复杂度也为
实际应用中每次进行插入/删除节点的时候,几乎都会破坏平衡树的第二个规则,因此我们都需要通过左旋和右旋来进行调整,使之再次成为一颗符合要求的平衡树。
平衡树常见的类型有:
- Splay
- treap
- AVL
- 红黑树
- 替罪羊树
- WBLT
其中红黑树常见于工程写法,OI中常用treap维护权值信息,Splay维护区间信息。
学习笔记——treap
学习笔记——Splay