平衡树大总结
二叉搜索(排序)树(Binary Search(Sort) Tree, BST)
BST 是满足一下性质的二叉树:
1.若根节点的右子树非空,则右子树的所以点的点值都大于根节点。
2.若根节点的左子树非空,则左子树的所以点的点值都小于根节点。
3.根的左右子树都为 BST。
不过正常维护 BST 插入删除是 \(O(N)\) 的(链),于是dalao们发明了各种各样的平衡树(优化的 BST )来均衡复杂度。
AVL-trees
又称高度平衡二叉树。
定义 \(h_u\) 表示以 \(u\) 为根的树的高度(这里把空树的高度定义为 1),\(L_u\) 是 \(u\) 的左子树,\(R_u\) 是 \(u\) 的右子树。
性质:
1.满足 BST 性质。
2.\(L_u\) 和 \(R_u\) 是 AVL。
3.\(|h_{L_u}-h_{R_u}|\le 1\)。
性质三可以看出来 AVL 的树高满足 \(O(\log N)\)(具体约是 \(1.44\log_2 N\),不过我不会证)。
而为了方便维护性质三,我们对于每一个节点设一个平衡因子 bf。
定义 \(bf_{u}=h_{L_u}-h_{R_u}\)。
不难看出 bf 取值只有 \(-1,0,1\),而若 \(|bf|> 1\),则我们称这棵二叉树失衡了,接下来考虑然后处理失衡。

浙公网安备 33010602011771号