普通二叉搜索树,插入新节点后可能导致树的不平衡。 红-黑树在插入(删除)一个节点时,只有遵循红-黑规则,树才能始终保持平衡。 综上,默认插入红色节点违规率50%,默认插入黑色节点违规率100%,所以默认插入红色节点好。 步骤:向下路途中的颜色变换——>向下路途中的旋转——>插入新节点——>插入节点之后的旋转 新插入节点有四种指向变化 插入节点之后的三种可能性情况 可能性1:P是黑色的(不会违背红-黑规则) 可能性2:P是红色的,X是G的一个外侧子孙点(出现红色节点与红色节点的连接,违背红-黑规则③) 可能性3:P是红色的,X是G的一个内测子孙点(出现红色节点与红色节点的连接,违背红-黑规则③) 其他情况分析 注意:上文展示了“X节点是外侧子孙节点”情况下的一个完整的插入过程,其中整个S3部分才是“向下途中的旋转”。 注意:上文展示了“X节点是内侧子孙节点”情况下的一个完整的插入过程,其中整个S3部分才是“向下途中的旋转”。 [1] Java数据结构和算法(第二版)文章目录
数据结构与算法——红-黑树
1 为什么需要红-黑树?
而平衡的二叉树,才能使搜索效率最高。
红-黑树在插入和删除的时候进行了一些特殊的处理,能使二叉树保持平衡。
2 红-黑规则
即 遵循红-黑规则<=>平衡树,把平衡树的问题转变为让树遵循红-黑规则的问题。
① 每一个节点不是红色的就是黑色的。
② 根总是黑色的。
③ 如果节点是红色的,则它的子节点必须是黑色的(反之倒不一定必须为真)。
④ 从根到叶节点或空子节点的每条路径,必须包含相同数目的黑色节点(即黑色高度相同)。
3 为什么默认插入红色节点?
4 如何修正违规?
(1) [三节点]颜色变换
(2) 单节点颜色改变
(3) 旋转
① 旋转分为左旋转和右旋转,以某个节点为顶点,向左或右“旋转”。
② 顶点的子节点和外侧子孙节点会跟随旋转方向上移或下移。
③ 横向移动节点:顶点的内侧子孙节点若是上移节点,则会断开与父节点的连接并且连接到它以前的祖父节点上;若原来是父节点的右子节点横向移动后会变成祖父节点的左子节点。
5 插入一个新节点
说明:G——祖父节点、P——父节点、X——新插入节点(1) 向下路途中的颜色变换
(3) 插入新节点
(4) 插入节点之后的旋转
(2) 向下路途中的旋转
此时不必纠结“X节点”是什么,下文将会说明。
6 删除
7 效率
参考
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算