【数据结构——红黑树】

前不久我刚刚更新了一篇关于数据结果中树的博文:博文地址
可能对于好多对树的结构不是很了解的朋友有些帮助

然后红黑树是面试环节中经常出现的问题
所以我今天也是专门写一篇关于红黑树的博文(方便我自己查阅也可能对大家有帮助)

学习红黑树之前首先要了解二叉查找树

二叉查找树特性:
1.左子树上的所有节点的值小于或等于根节点的值
2.右子树上所有节点的值大于或等于根节点的值
3.左右子树也都为二叉排序树

下面为例
在这里插入图片描述

二叉搜索树的特点
二叉搜索树在查找所需的最大次数就是二叉树的高度
在插入节点的时候也是利用类似的方法,通过一层一层的比较大小,找到新的节点的位置

二叉搜索树也存在缺点:
如果插入特定的值可能导致二叉树不平衡
使得查找的性能大打折扣,几乎变成了线性

因此为了解决二叉搜索树的问题 红黑树就诞生了

红黑树

红黑树是一种自平衡的二叉查找树,除了符合二叉查找树的特性还具有:(面试可能问到)
1.节点是红色或者黑色的
2.根节点是黑色的
3.每个叶子节点都是黑色的空节点
4.每个红色节点的两个子节点都是黑色的(每个叶子到根的所有路径上不能存在两个连续的红色节点)
5.从任意一个节点到每个叶子的所有路径都包含相同数目的黑色节点

下面就是一个很典型的红黑树
在这里插入图片描述
正因为上边的特性,所以才保证了红黑树的自平衡,红黑树从根到叶子的最长路劲不会超过最短路径的二倍

当然红黑树的规则也是会被破坏的,像下面这样的
在这里插入图片描述
这个时候就需要调整了,然而调整的方法有两种:变色和旋转

变色

为了重新符合红黑树的标准,尝试把红色节点改为黑色,黑色节点改为红色

左右旋转

逆时针的旋转,父节点被右孩子取代,自己成为自己的左孩子
在这里插入图片描述
顺时针旋转,左节点变为父节点,父节点变为自己的右孩子
在这里插入图片描述
具体例子这里就不再写出了

总之希望大家牢记红黑树的性质和调平衡的方法

希望我所写的对大家有帮助

来源:大佬的博文地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值