红黑树的数据结构原来是这样的!!

254 阅读2分钟

红黑树的底层数据结构:

(特殊的二叉树)二叉查找树 (追求极致的平衡,理想状态)

链表 ->二叉树->二叉查找树->特殊的二叉查找树(自平衡的二叉查找树)

时间复杂度就是我们红黑树的深度

二分查找法:

logn => 2^x =n(树的高度)=>x=log2^n =>logn (min+max)/2 :比如56 (1+100)/2 =50 依次类推

1.每个结点不是红色就是黑色

2.不可能有连在一起的红色结点

3.根节点都是黑色的root

4.每个红色结点的两个子结点都是黑色,叶子结点都是黑色,出度为0满足了性质就可以近似平衡,不一定要红黑,可以为其他的

旋转:

图片.png 首先找我们需要旋转的那个点,左旋以顺时针旋转90度,然后将旋转那个子节点的左子树, 挂到旋转的右子树

首先找我们需要旋转的那个点,右旋以逆时针旋转90度,然后将旋转那个子节点的右子树, 挂到旋转的左子树

变色规则:

旋转和颜色变换的规则:所有插入的点默认为红色

变色情况: 破坏红黑树规则就变色,也就是当前结点的父亲是红色,且他的父亲节点的另一个子节点也是红色(叔叔节点)

1.把父节点变黑色

2.叔叔节点变黑色

3.爷爷节点变红色

4.把指针定义到爷爷节点设为当前要操作。分析的点变换规则

左旋:当前父节点是红色,叔叔节点是黑色,且当前结点是右子树,左旋以父节点作为左旋

右旋:当前父节点是红色,叔叔节点是黑色,且当前结点是左子树,右旋爷爷节点。把父节点变黑,爷爷节点变红

第一步:变色 当前结点的父亲是红色,且他的父亲节点的另一个子节点也是红色(叔叔节点)

图片.png 第二步:判断左旋右旋 满足红黑树条件

图片.png