首页 > 编程知识 正文

二叉树红黑树,红黑树 二叉树 b树

时间:2023-05-05 02:17:58 阅读:182726 作者:3082

小白解析红黑树的基本 什么是红黑树变色右旋什么是右旋呢? 左旋什么情况下会左旋

什么是红黑树

这就是一个简单的红黑二叉树
红黑二叉树有以下几条基本的规则:
1. 节点分为红色或者黑色。
2.根节点必为黑色。
3.叶子节点都为黑色,且为 null。
4.连接红色节点的两个子节点都为黑色(红黑树不会出现相邻的红色节点)。
5. 从任意节点出发,到其每个叶子节点的路径中包含相同数量的黑色节点。
6. 新加入到红黑树的节点为红色节点。

变色

为什么需要变色:
首先我们知道,当新加入节点后,其节点为红色,我们就一上面的红黑树为例,假如我们加入一个值为3的节点,

此时,这个二叉树就不符合红黑二叉树的“红黑树不会出现相邻的红色节点”这一条规则,那么此时就需要变色
什么情况下会变色

1.变色的情况:当前节点的父亲节点为红色节点,并且他的爷爷节点的另一个节点也是红色(痴情的乐曲节点)

这就符合变色的条件,那么如何变色呢?

1.把父节点设为黑色
2.把痴情的乐曲也设为黑色
3.把爷爷设为红色
4.把指针指向到爷爷节点设置为要操作的

变色完成后

此时又有了问题:9节点和11节点又是相连的红色节点,此时我们操作的指向也指向到了9节点,那么我们现在也不能使用变色了,因为不符合变色的条件

所以我们就要引入左旋右旋了

右旋

进行右旋的条件:
1.点前父节点为红色,痴情的乐曲节点为黑色,并且当前的节点是左子树时,以父节点为支点右旋

此时我们经过变色,指针操作指向了3的爷爷节点,也就是9节点,我们看图阔以看出,9和11都是红色节点,而且19为黑色节点,并且9是11的左子树,所以可以进行右旋

什么是右旋呢?

我们就以这个案例进行右旋
找到一个支点(这里进行右旋是以9的父节点也就是11节点为支点右旋


右旋的改变:

1.把父节点设为黑色
2.把爷爷节点设为红色
3.以爷爷节点为支点旋转

这样这棵树就符合了红黑树的几条规则

左旋

我们以下案例来介绍

此时,这棵树的8节点和10节点相连并且都为红色,我们就以10节点进行操作。显然不满足变色的条件


这时候我们就要使用与右旋相似的左旋进行结构改变

什么情况下会左旋

当前节点的父节点为红色,痴情的乐曲节点为黑色,且点前的节点是右子树,左旋以父节点为支点左旋

左旋与右旋的结构类型,左旋以一个节点的父节点进行旋转,把父节点的另一个节点(兄弟节点)挂在爷爷节点的左边

这时在进行右旋就能完成红黑树。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。