红黑树的底层数据结构:
(特殊的二叉树)二叉查找树 (追求极致的平衡,理想状态)
链表 ->二叉树->二叉查找树->特殊的二叉查找树(自平衡的二叉查找树)
时间复杂度就是我们红黑树的深度
二分查找法:
logn => 2^x =n(树的高度)=>x=log2^n =>logn (min+max)/2 :比如56 (1+100)/2 =50 依次类推
1.每个结点不是红色就是黑色
2.不可能有连在一起的红色结点
3.根节点都是黑色的root
4.每个红色结点的两个子结点都是黑色,叶子结点都是黑色,出度为0满足了性质就可以近似平衡,不一定要红黑,可以为其他的
旋转:
首先找我们需要旋转的那个点,左旋以顺时针旋转90度,然后将旋转那个子节点的左子树, 挂到旋转的右子树
首先找我们需要旋转的那个点,右旋以逆时针旋转90度,然后将旋转那个子节点的右子树, 挂到旋转的左子树
变色规则:
旋转和颜色变换的规则:所有插入的点默认为红色
变色情况: 破坏红黑树规则就变色,也就是当前结点的父亲是红色,且他的父亲节点的另一个子节点也是红色(叔叔节点)
1.把父节点变黑色
2.叔叔节点变黑色
3.爷爷节点变红色
4.把指针定义到爷爷节点设为当前要操作。分析的点变换规则
左旋:当前父节点是红色,叔叔节点是黑色,且当前结点是右子树,左旋以父节点作为左旋
右旋:当前父节点是红色,叔叔节点是黑色,且当前结点是左子树,右旋爷爷节点。把父节点变黑,爷爷节点变红
第一步:变色 当前结点的父亲是红色,且他的父亲节点的另一个子节点也是红色(叔叔节点)
第二步:判断左旋右旋 满足红黑树条件