红黑树也是平衡二叉搜索树的一种,红黑树可能产生不平衡状态(高度相差1以上),但是红黑树的搜索效率与AVL树基本相等。
1.红黑树性质:
红黑树必须满足以下四个规则:
a)每个节点不是红色就是黑色
b)根节点必须是黑色
c)如果节点为红色,其子节点必须为黑色
d)任何一个节点至NULL的任何路径,所含的黑节点树必须相同
*为了方便通常使Null节点为黑
2.插入节点的情况讨论
根据红黑树的性质4,新插入节点必定为红色节点(确保不会新增黑节点造成树的不平衡),此时分为以下两种情况:
1)插入节点的父节点为黑色:此时符合红黑树的性质要求,直接插入即可
2)插入节点的父节点为红色:此时祖父节点将为黑色(因为不能有连续的红色),将有两种情况:
2.1)若其伯父节点为红色:则直接将其父节点与伯父节点改为黑色,将其祖父节点该为红色,并向上回溯,检查其祖父节点是否符合红黑树性质
2.2)若其伯父节点为黑色:则需要再分两种情况讨论:
2.2.1)若该节点为祖父节点的外侧节点(如:父节点位于祖父的左节点,子节点位于父节点的左节点):则单旋并使父节点为黑色,祖父节点为红色。
2.2.2)若该节点为祖父节点的内侧节点(如:父节点位于祖父的左节点,子节点位于父节点的右节点):则双旋并改变颜色