当前位置: 首页 > news >正文

AVL树 和 红黑树 的插入算法

1.AVL树

按照二叉搜索树的规则找到要插入的位置并插入,插入过后看是父节点的左还是右孩子,然后把父节点的平衡因子-1或+1,调整后如果父节点的平衡因子是0,那就说明这颗子树的高度插入前后不变,上面的就不用调整平衡因子了,到此结束。如果调整后如果父节点的平衡因子是1或-1,那就说明该子树的高度变化了,那就往上走。走了之后看是左孩子还是右孩子,然后给父节点的平衡因子-1/+1,然后看调整后的结果,如果是0或+/-1那和上一次处理一样,不再多说,如果是+/-2,那就开旋~,记该节点为Parent

1.parent节点平衡因子+2

那说明右边高,那就看看右边怎么个事,看右孩子的平衡因子

a.右孩子subR的平衡因子是+1

那说明还是右边高,直接左旋parent节点,subR平衡因子是变成0,parent平衡因子变成0

b.右孩子sub的平衡因子是-1

这种情况要先变成完全不平衡那种,即先右旋subR节点,然后就变成了上面那种完全不平衡的样子,然后左旋parent节点,旋转很简单,平衡因子有点难调。我们要根据subRL,也就是subR的左孩子来调整平衡因子,

如果subRL的平衡因子是0,subRL=0  parent=0  subR=0

如果subRL的平衡因子是1,subRL=0  parent=-1  subR=0

如果subRL的平衡因子是-1,subRL=0  parent=0  subR=1

2.parent节点平衡因子-2

思考方式和+2一样

2.红黑树

按照二叉搜索树的方式找到要插入的位置并插入,节点默认应该是红色而不是黑色,因为红色插入的话不一定会破坏红黑树的规则,而黑色节点插入一定会破坏每条路径上黑色节点个数相同这个规则。插入红色节点后,如果父节点是黑色,那就什么规则都没破坏,结束了。如果父节点是红色,那不能有相邻红色节点,所以要调整,插入这个结点之前应该满足是红黑树,所以父节点是红色说明爷爷节点一定是黑色,这时的关键就是叔叔节点也就是爷爷结点的另一个子节点

1.叔叔节点是红色

那直接把父节点和叔叔节点变成黑色,爷爷节点变成红色,然后继续往上调整,爷爷节点就变成了新加入的红色节点,正如一开始的孙子节点一样

2.叔叔节点是黑色或不存在

这个时候要开旋了~

爷爷节点记为parent,

a.假如父节点是subL

也就是爷爷节点的左孩子,然后当前节点subLL,也就是父节点的左节点,那就右旋parent,然后parent变为红色,父节点变为黑色;当前节点是subLR,也就是当前节点是父节点的右孩子,那就先左旋subL,变成上一种情况那种样子,然后右旋parent,改parent为红色,subL为黑色

b.假如父节点是subR

然后分类当前节点如上

相关文章:

  • 政务服务智能化改造方案和案例分析
  • 浔川AI测试版内测报告
  • 无重复字符的最长子串(3)
  • 第三章 - 软件质量工程体系
  • JAVA在线考试系统考试管理题库管理成绩查询重复考试学生管理教师管理源码
  • QTtricks
  • 神经网络开发实战:从零基础到企业级应用(含CNN、RNN、BP网络代码详解)
  • 开源PDF解析工具Marker深度解析
  • Python-numpy中ndarray对象创建,数据类型,基本属性
  • 2025年企业Radius认证服务器市场深度调研:中小企业身份安全投入产出比最优解
  • 基于CBOW模型的词向量训练实战:从原理到PyTorch实现
  • MySQL基础关键_008_DDL 和 DML(一)
  • 杰理-AC696音箱linein无法插入检测
  • 【C++】grpc(一):安装
  • 探索神经符号系统:医疗AI的范式化进程分析
  • Cursor报错Your request has been blocked解决方案
  • SpringBoot集成CXF框架,实现WebService
  • 数据结构中 数组、链表、图的概念
  • 从围棋到LabVIEW:快速入门与长期精通
  • Python中的客户端和服务端交互的基本内容
  • 许昌市场监管部门对胖东来玉石开展日常检查:平均毛利率不超20%
  • 国产基因测序仪龙头华大智造业绩持续承压,今年有望迎来拐点?
  • 交通运输部、水利部同日召开会议,深刻汲取贵州游船倾覆事故教训
  • 巴菲特掌舵伯克希尔60年后将卸任CEO,库克:认识他是人生中最珍贵的经历之一
  • 央广网评政府食堂打开大门:小城文旅爆火的底层密码就是真诚
  • 结束北京队与总决赛十年之痒的,为何会是一度被群嘲的许利民