java中的数据结构平衡二叉树和红黑树

平衡二叉树是左边子节点比父节点小,右边子节点比父节点大,左节点深度和右节点深度相同,或者右节点深度跟左节点深度相差1,比较严苛,需要不断的变化,使得二叉树平衡,损坏性能CPU。

红黑树是相对宽松的平衡二叉树,最差情况下,右节点深度跟左节点深度相差2倍,包含内容:
1,树节点只有红节点和黑节点
2,根节点必须是黑节点
3,叶子节点值即使是null,也必须是黑节点(意思是一半以上黑节点)
4,新插入的节点必须是红节点
5,红节点的子节点必须是黑节点
6,从任意一个节点出发到叶子节点的路径上黑节点个数总和必须相同(假如全部是黑节点,就是节点数相同,最差情况下,假如一边是黑节点,没有红节点,而另一边有红节点和黑节点,因为红节点子节点必须是黑节点,所以他们交替出现,因为叶子节点必须是黑节点,所以一边是5个节点,另一边是10个节点,他们相差一半)

 

 上图是红黑树操作规则:

1,其中类型表示当前节点是怎么从祖父节点搜索到父节点,再从父节点搜索到孙子节点,可能父节点是在祖父节点的右边,孙子节点又是父节点的右子节点,所以是右右类型,假如孙子节点是父节点的左边子节点,就是右左类型,假如祖父节点的子节点是左边子节点,孙子节点是父节点的左子节点,则是左左类型,如果孙子节点是父节点的右子节点,则是左右类型。

2,左旋表示以当前节点的父节点为支点,向左边旋转,这时父节点变为祖父节点,原来的祖父节点变为子节点,当前节点由原来的孙子节点变为子节点。比如a->b->c,左旋之后变为b->a,b->c。假如只有两个节点a->b,左旋之后,原来的父节点变为子节点,子节点变为父节点。

 

链接:https://www.ixigua.com/i6835579764477002247/

posted @   ppjj  阅读(745)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2018-09-12 scala工程导入报错:scalatest_2.10-1.9.1.jar is cross-compiled with an incompatible version of Scala (2.10).
2018-09-12 解决java.io.IOException: Cannot run program "javac"问题,并设置jdk版本
2015-09-12 对oracle实例的内存(SGA和PGA)进行调整,优化数据库性
2015-09-12 oracle中lock和latch的用途
2015-09-12 oracle中awr性能报告阅读笔记
点击右上角即可分享
微信分享提示