AVL树:
avl树是带有条件的二叉查找树,
平衡条件:每个节点的左子树和右子树的高度最多差1的二叉查找树
如果出现了不平衡可以进行左旋或右旋进行调整,使树达到平衡。
优点:查找速度快,添加树节点慢
红黑树:
条件:从一个节点开始,左子树和右子树两边的高度只差不超过2倍。
优点:查找速度虽然仅次于avl树,但是红黑树的添加节点的速度快。
特征:
1.节点都有颜色
2.在插入和删除的过程中,要遵循保持这些颜色的不同排列的规则
红-黑规则
当插入(或者删除)一个新节点时,必须要遵循一定的规则,它们被称为红-黑规则。如果遵循这些规则,树就是平衡的,规则如下:
1.每一个节点不是红色的就是黑色的。
2.根结点总是黑色的。
3.每个叶子节点都是黑色的。
3.如果节点是红色的,则它的子节点必须是黑色的(反之到不一定必须为真)
4.从根结点或空子节点的每条路径,必须包含相同数目的黑色节点。
修正方法:
1.改变节点颜色
2.执行旋转操作
右边不平衡->左旋
下面列出几个case以及解决办法
case1:
现象:当前节点的父节点是红色,且当前节点的祖父节点的另一个子节点(叔叔节点)也是红色。
处理策略:
第一步:将父节点设为黑色
第二步:将叔叔节点设为黑色
第三步:将祖父节点设为红色
第四步:将祖父节点设为当前节点(红色节点);即,之后继续对当前节点进行操作
case2:
现象:当前节点的父节点是红色,叔叔节点是黑色,且当前节点是其父节点的右孩子
处理策略:
第一步:将父节点作为新的当前节点
第二步:以新的当前节点为支点进行左旋
case3:
现象:当前节点的父节点是红色,叔叔节点是黑色,且当前节点是其父节点的左孩子
处理策略:
第一步:将父节点设为黑色
第二步:将祖父节点设为红色
第三步:以祖父节点为支点进行右旋
未完,待续...