二叉排序树的两种优化方法
平衡二叉树和红黑树
二叉排序树
-- 左子树小于根小于右子树。先序遍历之后节点是有序递增的。
平衡二叉树(AVL)
-- 它仍然是一颗二叉排序树,不过父节点的左子树和右子树的高度差不能大于1
大白话:观察所有的终端结点,找到一个最高的和最低的,它们所在的层数(也就是高度或深度)。 只能差一层。
也就保证了平衡二叉树是深度最小的二叉排序树。
(不再叙述平衡调整过程)
二叉排序树查找就是二分法查找,也就是说从根节点开始每向下一层,就表示经过了一次比较查找。 因此,如果目标节点的深度越小,被查找到的速度越快。因此平衡二叉树更适合查找操作。
红黑树(RB树)
-- 红黑树属于平衡树(并非严格平衡),其他平衡树还有:AVL,SBT,伸展树,TREAP 等等
大白话:红黑树并不像平衡二叉树那样要求严格平衡。
节点由红色和黑色表示。 根结点为黑色,每个红色节点的两个子节点都是黑色,也就保证了从根节点到终端节点的路径上没有连续的两个红色。并且要求任意节点到每个叶子节点的路径上包含树木相同的黑色节点。
因此红黑树的高度可能比平衡二叉树更高,意味着查找效率可能略逊色于平衡二叉树。
但是在增加和删除节点操作时,红黑树重新维持平衡只需三步之内,而平衡二叉树则要经过大量的计算和旋转。
因此,如果搜索次数远大于删除和插入,则选择AVL,若都差不多,就选择RB树