java 树什么意思是什么意思是什么_[Java教程]什么是红黑树

本文详细介绍了二叉查找树和红黑树的概念。二叉查找树是一种自平衡的数据结构,而红黑树是其优化版,通过特定的规则保持平衡,确保高效查找。文章阐述了红黑树的特性,包括颜色规则和路径平衡,并展示了插入新节点可能导致不平衡及如何通过变色和旋转进行调整的过程。
摘要由CSDN通过智能技术生成

[Java教程]什么是红黑树

0 2021-01-06 10:00:30

编写不易,转载注明出处:https://www.cnblogs.com/lmh15054109/p/14239386.html在学习红黑树之前,需要先理解二叉查找树(Binary Search Tree)。

一、二叉查找树

二叉查找树(BST)特性1. 左子树上所有节点的值均小于或等于它的根节点的值。 2. 右子树上所有节点的值均大于或等于他的根节点的值。 3. 左、右子树也分别为二叉排序树。

(1)查找查找一下节点值为10 的节点。

bc91bb04e6e9c61e24c974e4440db8f2.gif1. 根节点为9,10>9,查看右孩子13。

bc91bb04e6e9c61e24c974e4440db8f2.gif2. 10<13 ,查看左孩子11。

bc91bb04e6e9c61e24c974e4440db8f2.gif3. 10 < 11 ,查看左孩子 10,刚好为需要查找的对象。

bc91bb04e6e9c61e24c974e4440db8f2.gif

二叉查找树利用的正是二分查找的思想,查找所需的最大次数等同于二叉查找树的高度。

(2)插入

插入节点时,也使用类似的方法,通过一层一层的比较大小,找到新节点适合的位置,然后执行插入。

插入新节点的时候暴露出二叉查找树的缺陷。

bc91bb04e6e9c61e24c974e4440db8f2.gif

假设现在我们需要依照BST的特性,向初始只有三个节点,根节点为9,左孩子为8,右孩子为12的BST中依次插入7,6,5,4,3。其结果会入上图所示。

这样的形态虽然也符合二叉查找树的特性,但是查询的性能大打折扣,几乎变成线性的了。

红黑树就较好的解决了二叉查找树多次插入新节点而导致的不平衡。

二、红黑树

(1)红黑树的特性

红黑树(Red Black Tree)是一种自平衡的二叉查找树。出了符合BST的基本特性外,还具有其他特性。

规则:节点是红色或黑色的。

根节点是黑色的。

每个叶子节点都是黑色的空节点(NIL节点)。

每个红色节点的两个子节点都是黑色的。(从每个叶子到根的所有路径上不能有两个连续的红色节点。)

从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。

bc91bb04e6e9c61e24c974e4440db8f2.gif

以上特性保证了红黑树的自平衡。红黑树从根到叶子的最长路径不会超过最短路径的两倍。

当插入或删除节点时,红黑树的规则有可能被打破。

例如:向原红黑树插入值为21的新节点:

bc91bb04e6e9c61e24c974e4440db8f2.gif

其父节点是红色的,违反了规则4(每个红色节点的两个子节点都是黑色),我们需要进行必要的调整,使之重新符合红黑树的规则。

(2)红黑树的调整方式

红黑树的调整方式有两种,分别是:变色,旋转。其中旋转细分为:左旋转,右旋转。变色:为了符合红黑树的规则,尝试把红色节点转变为黑色,或把黑色变为红色。

(1)由于21,22都为红色节点,违反了规则4(每个叶子节点到根节点的所有路径上不能有连续的红色节点),所以将22变成黑色。

bc91bb04e6e9c61e24c974e4440db8f2.gif

(2)此时从25到其叶子节点违反了规则5,需要将25从黑色变成红色。

bc91bb04e6e9c61e24c974e4440db8f2.gif

(3)此时,25、27形成了两个连续的红色节点,需要将27变为黑色。

bc91bb04e6e9c61e24c974e4440db8f2.gif左旋转:逆时针旋转红黑树的两个节点,使得父节点被自己的右孩子取代,而自己成为左孩子。

bc91bb04e6e9c61e24c974e4440db8f2.gif右旋转:顺时针旋转红黑树的两个节点,使得父节点被自己的左孩子取代,而自己成为右孩子。

bc91bb04e6e9c61e24c974e4440db8f2.gif

在上述插入节点21的例子中,经过变色形成了17,25两个连续红色节点的结果。如果将17变为黑色,将打破规则4,由于根节点能是黑色,所以根节点13不可能变成红色。

此时将13作为X,17作为Y进行左旋处理。

bc91bb04e6e9c61e24c974e4440db8f2.gif

结果:

bc91bb04e6e9c61e24c974e4440db8f2.gif

根据规则的2(根节点必须是黑色)进行变色,17变为黑色,根据规则5(从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点),13变为红色,8变为黑色,1,11变为红色,6变为黑色。

bc91bb04e6e9c61e24c974e4440db8f2.gif

此时,红黑树调整貌似已经调整到位,其实不然。根据规则5可知从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点,从17到6到NIL节点的黑色节点个数是4,而其他路径的黑色个数是3,所以还需要继续处理。

我们将13看为X,8看为Y,进行右旋转操作。

bc91bb04e6e9c61e24c974e4440db8f2.gif

结果:

bc91bb04e6e9c61e24c974e4440db8f2.gif

然后进行变色,最终:

bc91bb04e6e9c61e24c974e4440db8f2.gif

插入节点21到红黑树中的操作就完成,其中的步骤比较复杂,具体步骤为:变色 ——>左旋转——>变色 ——>右旋转——>变色

本文网址:http://www.shaoqun.com/a/505992.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

HTML

0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值