<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>数据结构 on Zeros遇见的作品集合</title><link>https://zeroszhang.github.io/tags/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/</link><description>Recent content in 数据结构 on Zeros遇见的作品集合</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>Zeros遇见</copyright><lastBuildDate>Sat, 24 May 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://zeroszhang.github.io/tags/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/index.xml" rel="self" type="application/rss+xml"/><item><title>红黑树</title><link>https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/</link><pubDate>Sat, 24 May 2025 00:00:00 +0000</pubDate><guid>https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/</guid><description>&lt;img src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/cover.jpg" alt="Featured image of post 红黑树" /&gt;&lt;h2 id="红黑树诞生的背景"&gt;&lt;a href="#%e7%ba%a2%e9%bb%91%e6%a0%91%e8%af%9e%e7%94%9f%e7%9a%84%e8%83%8c%e6%99%af" class="header-anchor"&gt;&lt;/a&gt;红黑树诞生的背景&#10;&lt;/h2&gt;&lt;p&gt;普通的二叉搜索树在添加有序数据（递增或者递减）的时候，所有的节点都会在根节点的右侧或者左侧，此时普通的二叉树就退化成链表，操作的时间复杂组退化成了$O(N)$。&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="309px" data-flex-grow="128" height="559" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/image_whCvbOT7Ij.png" width="720"&gt;&lt;/p&gt;&#10;&lt;p&gt;于是就有了平衡二叉树（AVL 树）。平衡二叉树通过平衡因子来限制树的解构——&lt;strong&gt;任意节点的子树的高度差都小于等于 1&lt;/strong&gt;。将查询效率优化为了$\log _{2} n$。&lt;/p&gt;&#10;&lt;p&gt;AVL 树作为严格平衡的二叉树，就需要频繁的通过旋转操作来保持平衡，而旋转操作是比较耗时的，导致了维护这种高度平衡所付出的代价比从中获得的收益还大，因此只适用于插入删除次数较少，但是查找多的情况。&lt;/p&gt;&#10;&lt;p&gt;在上面的大背景下，诞生了红黑树，即使在最坏的情况下，也可以在$ \log _{2} n$时间内实现插入/删除/查找操作。&lt;/p&gt;&#10;&lt;p&gt;红黑树是一个弱平衡二叉树，相比于严格平衡的 AVL 树，每次树的结构发生改变需要调整时，所需要的转换次数更少，因此对于插入和删除操作的效率更高。&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="489px" data-flex-grow="203" height="354" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/image_MfNghsHPdV.png" width="722"&gt;&lt;/p&gt;&#10;&lt;h2 id="红黑属性的意义"&gt;&lt;a href="#%e7%ba%a2%e9%bb%91%e5%b1%9e%e6%80%a7%e7%9a%84%e6%84%8f%e4%b9%89" class="header-anchor"&gt;&lt;/a&gt;红黑属性的意义&#10;&lt;/h2&gt;&lt;p&gt;为了确保红黑树的弱平衡属性，要求没有任何一条路径比其他路径长出两倍。因此在每个节点上增加了颜色属性——红或者黑。&lt;/p&gt;&#10;&lt;p&gt;红黑属性通过颜色规则来保持树的平衡，减少旋转操作。每次改变了树的结构（插入/删除操作）之后，最多只需要两次旋转操作即可完成树的平衡。&lt;/p&gt;&#10;&lt;h2 id="红黑树的性质"&gt;&lt;a href="#%e7%ba%a2%e9%bb%91%e6%a0%91%e7%9a%84%e6%80%a7%e8%b4%a8" class="header-anchor"&gt;&lt;/a&gt;红黑树的性质&#10;&lt;/h2&gt;&lt;p&gt;红黑树有五条性质，记住后面两条就行：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;每个节点非红即黑&lt;/li&gt;&#10;&lt;li&gt;根节点是黑的&lt;/li&gt;&#10;&lt;li&gt;每个叶节点（树尾端 NULL 节点）都是黑的&lt;/li&gt;&#10;&lt;li&gt;如果一个节点是红的,那么它的两儿子都是黑的&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#10;&lt;li&gt;任意节点到每个叶子节点的所有路径都包含相同数目的黑节点&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="节点的定义"&gt;&lt;a href="#%e8%8a%82%e7%82%b9%e7%9a%84%e5%ae%9a%e4%b9%89" class="header-anchor"&gt;&lt;/a&gt;节点的定义&#10;&lt;/h2&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="651px" data-flex-grow="271" height="257" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-12_09-32-57_A-oVSsOBZu.png" width="698"&gt;&lt;/p&gt;&#10;&lt;h2 id="红黑树的着色和旋转"&gt;&lt;a href="#%e7%ba%a2%e9%bb%91%e6%a0%91%e7%9a%84%e7%9d%80%e8%89%b2%e5%92%8c%e6%97%8b%e8%bd%ac" class="header-anchor"&gt;&lt;/a&gt;红黑树的着色和旋转&#10;&lt;/h2&gt;&lt;p&gt;在插入/删除节点的时候，会破坏红黑树的性质，因此需要调整红黑树的结构，以满足上述性质。总共包含三种调整的操作——着色/左旋/右旋。&lt;/p&gt;&#10;&lt;p&gt;着色指的是将红色节点变为黑色节点，或者黑色节点变为红色节点。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="黑变红或者红变黑" class="gallery-image" data-flex-basis="499px" data-flex-grow="208" height="257" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-10_20-44-40_JD_iLQlgdf.png" width="535"&gt;&lt;/p&gt;&#10;&lt;p&gt;左旋操作如下所示：&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="546px" data-flex-grow="227" height="485" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/image_9Zz4k-LX_8.png" srcset="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/image_9Zz4k-LX_8_hu_bd3eb84b3084cf5c.png 800w, https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/image_9Zz4k-LX_8.png 1105w" width="1105"&gt;&lt;/p&gt;&#10;&lt;p&gt;右旋操作如下所示：&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="547px" data-flex-grow="228" height="485" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/image_KThfgLwkU8.png" srcset="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/image_KThfgLwkU8_hu_3938a2b91acc9b6d.png 800w, https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/image_KThfgLwkU8.png 1106w" width="1106"&gt;&lt;/p&gt;&#10;&lt;h2 id="红黑树中的红黑属性并非唯一"&gt;&lt;a href="#%e7%ba%a2%e9%bb%91%e6%a0%91%e4%b8%ad%e7%9a%84%e7%ba%a2%e9%bb%91%e5%b1%9e%e6%80%a7%e5%b9%b6%e9%9d%9e%e5%94%af%e4%b8%80" class="header-anchor"&gt;&lt;/a&gt;红黑树中的红黑属性并非唯一&#10;&lt;/h2&gt;&lt;p&gt;红黑树的颜色属性情况并非只有唯一解，只要保证满足红黑树性质即可。如下所示，在插入 101 后删除 101，红黑树还是原来的红黑树，但是颜色属性变化了。&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="428px" data-flex-grow="178" height="172" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-10_20-51-32_17dz04mD3F.png" width="307"&gt;&#10;&lt;img class="gallery-image" data-flex-basis="428px" data-flex-grow="178" height="172" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-10_20-51-52_ibPOatK2dX.png" width="307"&gt;&lt;/p&gt;&#10;&lt;h2 id="红黑树的插入操作"&gt;&lt;a href="#%e7%ba%a2%e9%bb%91%e6%a0%91%e7%9a%84%e6%8f%92%e5%85%a5%e6%93%8d%e4%bd%9c" class="header-anchor"&gt;&lt;/a&gt;红黑树的插入操作&#10;&lt;/h2&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;这里有一个规则，新插入的节点一定是红色的。因为红色节点可能不会影响平衡&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;，但是黑色节点一定会影响树的平衡&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;。默认插入红色节点可以减少后续操作。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;红黑树的插入操作分为四种情况：&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="红黑树插入操作" class="gallery-image" data-flex-basis="629px" data-flex-grow="262" height="1125" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/%E7%BA%A2%E9%BB%91%E6%A0%91%E6%8F%92%E5%85%A5%E6%93%8D%E4%BD%9C-1748085534718-3.png" srcset="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/%E7%BA%A2%E9%BB%91%E6%A0%91%E6%8F%92%E5%85%A5%E6%93%8D%E4%BD%9C-1748085534718-3_hu_41c1233fdb102f5d.png 800w, https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/%E7%BA%A2%E9%BB%91%E6%A0%91%E6%8F%92%E5%85%A5%E6%93%8D%E4%BD%9C-1748085534718-3_hu_dde1f9d92e8ec3a9.png 1600w, https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/%E7%BA%A2%E9%BB%91%E6%A0%91%E6%8F%92%E5%85%A5%E6%93%8D%E4%BD%9C-1748085534718-3_hu_533868edb7c5121.png 2400w, https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/%E7%BA%A2%E9%BB%91%E6%A0%91%E6%8F%92%E5%85%A5%E6%93%8D%E4%BD%9C-1748085534718-3.png 2949w" width="2949"&gt;&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;🦪&lt;strong&gt;以下的「父节点」「叔叔节点」「祖父节点」都是插入新节点后，调整树结构前的状态（图 2 中）&lt;/strong&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="父节点为黑"&gt;&lt;a href="#%e7%88%b6%e8%8a%82%e7%82%b9%e4%b8%ba%e9%bb%91" class="header-anchor"&gt;&lt;/a&gt;父节点为黑&#10;&lt;/h3&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;🧋 直接插入新元素，不需要调整树的结构。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="父节点为红色叔叔节点为红色"&gt;&lt;a href="#%e7%88%b6%e8%8a%82%e7%82%b9%e4%b8%ba%e7%ba%a2%e8%89%b2%e5%8f%94%e5%8f%94%e8%8a%82%e7%82%b9%e4%b8%ba%e7%ba%a2%e8%89%b2" class="header-anchor"&gt;&lt;/a&gt;父节点为红色，叔叔节点为红色&#10;&lt;/h3&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;🧋「父节点」和「叔叔节点」变黑，「祖父节点」变红，递归检查祖父节点是否引发新的冲突。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;如图 1，插入节点 120。父节点是 110，叔叔节点是 90，符合该情况。因此将父节点 110 和叔叔节点 90 变黑，祖父节点 100 变红。引发性质 2 冲突，因此将祖父节点 100 变黑。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="原始树 原始树 " class="gallery-image" data-flex-basis="342px" data-flex-grow="142" data-title-escaped="原始树 原始树" height="238" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-10_21-23-40_wqZWRdTZB4.png" title="原始树 原始树" width="340"&gt;&#10;&lt;img alt="插入节点120 插入节点120 " class="gallery-image" data-flex-basis="342px" data-flex-grow="142" data-title-escaped="插入节点120 插入节点120" height="238" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-10_21-30-55_Eq3eUJ4yAW.png" title="插入节点120 插入节点120" width="340"&gt;&#10;&lt;img alt="调整树的结构 调整树的结构 " class="gallery-image" data-flex-basis="342px" data-flex-grow="142" data-title-escaped="调整树的结构 调整树的结构" height="238" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-10_21-22-08_XaEl8hp_LS.gif" title="调整树的结构 调整树的结构" width="340"&gt;&lt;/p&gt;&#10;&lt;h3 id="父节点为红色叔叔节点为黑色且父子同侧llrr-型"&gt;&lt;a href="#%e7%88%b6%e8%8a%82%e7%82%b9%e4%b8%ba%e7%ba%a2%e8%89%b2%e5%8f%94%e5%8f%94%e8%8a%82%e7%82%b9%e4%b8%ba%e9%bb%91%e8%89%b2%e4%b8%94%e7%88%b6%e5%ad%90%e5%90%8c%e4%be%a7llrr-%e5%9e%8b" class="header-anchor"&gt;&lt;/a&gt;父节点为红色，叔叔节点为黑色，且父子同侧（LL/RR 型）&#10;&lt;/h3&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;🧋&lt;strong&gt;左左型（LL）&lt;/strong&gt;：右旋「祖父节点」。「父节点」变黑，「祖父节点」变红。&lt;/p&gt;&#10;&lt;p&gt;🧋&lt;strong&gt;右右型（RR）&lt;/strong&gt;：左旋「祖父节点」。「父节点」变黑，「祖父节点」变红。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;code&gt;例1：&lt;/code&gt;插入节点 70。父节点 80 为红色，叔叔节点 null 为黑色，且父节点 80 和目标节点 70 都是左子节点，为 LL 型。因此对祖父节点 90 进行右旋。父节点 80 变黑，祖父节点 90 变红。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="原始树 原始树 " class="gallery-image" data-flex-basis="305px" data-flex-grow="127" data-title-escaped="原始树 原始树" height="299" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-10_21-27-03_S3aHGGYfkj.png" title="原始树 原始树" width="381"&gt;&#10;&lt;img alt="插入70节点 插入70节点 " class="gallery-image" data-flex-basis="305px" data-flex-grow="127" data-title-escaped="插入70节点 插入70节点" height="299" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-10_21-29-45_l1pn2zPmt0.png" title="插入70节点 插入70节点" width="381"&gt;&#10;&lt;img alt="调整树的结构 调整树的结构 " class="gallery-image" data-flex-basis="305px" data-flex-grow="127" data-title-escaped="调整树的结构 调整树的结构" height="299" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-10_21-26-47_FUDOqt44ET.gif" title="调整树的结构 调整树的结构" width="381"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;例2：&lt;/code&gt;插入节点 97。父节点 95 为红色，叔叔节点 null 为黑色，且父节点 95 和目标节点 97 都是右子节点，为 RR 型。因此对祖父节点 90 进行右旋。父节点 95 变黑，祖父节点 90 变红。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="原始树 原始树 " class="gallery-image" data-flex-basis="305px" data-flex-grow="127" data-title-escaped="原始树 原始树" height="299" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-10_21-44-53_lfBYGH_RQO.png" title="原始树 原始树" width="381"&gt;&#10;&lt;img alt="插入节点97 插入节点97 " class="gallery-image" data-flex-basis="305px" data-flex-grow="127" data-title-escaped="插入节点97 插入节点97" height="299" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-10_21-45-21_WeWz0ANMgW.png" title="插入节点97 插入节点97" width="381"&gt;&#10;&lt;img alt="调整树的结构 调整树的结构 " class="gallery-image" data-flex-basis="305px" data-flex-grow="127" data-title-escaped="调整树的结构 调整树的结构" height="299" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-10_21-44-41_8BulbeUvYo.gif" title="调整树的结构 调整树的结构" width="381"&gt;&lt;/p&gt;&#10;&lt;h3 id="父节点为红色叔叔节点为黑色且父子异侧lrrl-型"&gt;&lt;a href="#%e7%88%b6%e8%8a%82%e7%82%b9%e4%b8%ba%e7%ba%a2%e8%89%b2%e5%8f%94%e5%8f%94%e8%8a%82%e7%82%b9%e4%b8%ba%e9%bb%91%e8%89%b2%e4%b8%94%e7%88%b6%e5%ad%90%e5%bc%82%e4%be%a7lrrl-%e5%9e%8b" class="header-anchor"&gt;&lt;/a&gt;父节点为红色，叔叔节点为黑色，且父子异侧（LR/RL 型）&#10;&lt;/h3&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;🧋&lt;strong&gt;左右型（LR）&lt;/strong&gt;：先左旋「父节点」，再右旋「祖父节点」。「目标节点」变黑，「祖父节点」变红&lt;sup id="fnref:4"&gt;&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref"&gt;4&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;&#10;&lt;p&gt;🧋&lt;strong&gt;右左型（RL）&lt;/strong&gt;：先右旋「父节点」，再左旋「祖父节点」。「目标节点」变黑，「祖父节点」变红&lt;sup id="fnref:5"&gt;&lt;a href="#fn:5" class="footnote-ref" role="doc-noteref"&gt;5&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;code&gt;例1：&lt;/code&gt;插入节点 85。父节点 80 为红色，叔叔节点 null 为黑色，且父节点 80 是左子节点，目标节点 85 是右子节点，为 LR 型。因此先对父节点 80 进行左旋，再对祖父节点 90 进行右旋。目标节点 85 变黑，祖父节点 90 变红。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="原始树 原始树 " class="gallery-image" data-flex-basis="305px" data-flex-grow="127" data-title-escaped="原始树 原始树" height="299" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-10_21-48-38_LK1TUkgXl6.png" title="原始树 原始树" width="381"&gt;&#10;&lt;img alt="插入节点85 插入节点85 " class="gallery-image" data-flex-basis="305px" data-flex-grow="127" data-title-escaped="插入节点85 插入节点85" height="299" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-10_21-48-55_R9wBcsUPJ9.png" title="插入节点85 插入节点85" width="381"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="调整树的结构 调整树的结构 " class="gallery-image" data-flex-basis="305px" data-flex-grow="127" data-title-escaped="调整树的结构 调整树的结构" height="299" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-10_21-49-53_8OB_UvhBzd.gif" title="调整树的结构 调整树的结构" width="381"&gt;&#10;&lt;img alt="调整后的树 调整后的树 " class="gallery-image" data-flex-basis="305px" data-flex-grow="127" data-title-escaped="调整后的树 调整后的树" height="299" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-10_21-49-07_mHJq5CXLOH.png" title="调整后的树 调整后的树" width="381"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;例2：&lt;/code&gt;插入节点 92。父节点 95 为红色，叔叔节点 null 为黑色，且父节点 95 是右子节点，目标节点 92 是左子节点，为 RL 型。因此先对父节点 95 进行右旋，再对祖父节点 90 进行左旋。目标节点 92 变黑，祖父节点 90 变红。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="原始树 原始树 " class="gallery-image" data-flex-basis="305px" data-flex-grow="127" data-title-escaped="原始树 原始树" height="299" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-10_21-59-16_tB2m_G8t1q.png" title="原始树 原始树" width="381"&gt;&#10;&lt;img alt="插入节点92 插入节点92 " class="gallery-image" data-flex-basis="305px" data-flex-grow="127" data-title-escaped="插入节点92 插入节点92" height="299" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-10_22-00-41_p3vE5F8v7L.png" title="插入节点92 插入节点92" width="381"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="调整树的结构 调整树的结构 " class="gallery-image" data-flex-basis="305px" data-flex-grow="127" data-title-escaped="调整树的结构 调整树的结构" height="299" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-10_22-00-18_kgV5R6JkGA.gif" title="调整树的结构 调整树的结构" width="381"&gt;&#10;&lt;img alt="调整后的树 调整后的树 " class="gallery-image" data-flex-basis="305px" data-flex-grow="127" data-title-escaped="调整后的树 调整后的树" height="299" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-10_21-59-31_frbTBTN7dN.png" title="调整后的树 调整后的树" width="381"&gt;&lt;/p&gt;&#10;&lt;h2 id="红黑树的删除操作"&gt;&lt;a href="#%e7%ba%a2%e9%bb%91%e6%a0%91%e7%9a%84%e5%88%a0%e9%99%a4%e6%93%8d%e4%bd%9c" class="header-anchor"&gt;&lt;/a&gt;红黑树的删除操作&#10;&lt;/h2&gt;&lt;p&gt;&lt;img alt="红黑树的删除" class="gallery-image" data-flex-basis="411px" data-flex-grow="171" height="978" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/%E7%BA%A2%E9%BB%91%E6%A0%91%E7%9A%84%E5%88%A0%E9%99%A4-1748085534719-4.png" srcset="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/%E7%BA%A2%E9%BB%91%E6%A0%91%E7%9A%84%E5%88%A0%E9%99%A4-1748085534719-4_hu_5fd2c678793ab8f4.png 800w, https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/%E7%BA%A2%E9%BB%91%E6%A0%91%E7%9A%84%E5%88%A0%E9%99%A4-1748085534719-4_hu_13b14e300b68545c.png 1600w, https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/%E7%BA%A2%E9%BB%91%E6%A0%91%E7%9A%84%E5%88%A0%E9%99%A4-1748085534719-4.png 1677w" width="1677"&gt;&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;🧋「当前节点」指的是删除了「目标节点」后，替换了「目标节点」位置的节点。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="删除单个红节点"&gt;&lt;a href="#%e5%88%a0%e9%99%a4%e5%8d%95%e4%b8%aa%e7%ba%a2%e8%8a%82%e7%82%b9" class="header-anchor"&gt;&lt;/a&gt;删除单个红节点&#10;&lt;/h3&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;🧋 单个红节点指的是左右子节点都是 null 的节点。不会影响红黑树的性质，因此可以直接删除。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="407px" data-flex-grow="169" height="192" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-12_09-37-07_lmA_U2bY5F.png" width="326"&gt;&#10;&lt;img class="gallery-image" data-flex-basis="407px" data-flex-grow="169" height="192" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-12_09-37-25_UgD77giUAM.png" width="326"&gt;&lt;/p&gt;&#10;&lt;h3 id="删除单个黑节点"&gt;&lt;a href="#%e5%88%a0%e9%99%a4%e5%8d%95%e4%b8%aa%e9%bb%91%e8%8a%82%e7%82%b9" class="header-anchor"&gt;&lt;/a&gt;&lt;strong&gt;删除单个黑节点&lt;/strong&gt;&#10;&lt;/h3&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;🧋 单个黑节点指得是左右子节点都是 null 的节点。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;兄弟节点是黑色，且远侄节点为红&lt;/strong&gt;：旋转父节点，兄弟节点颜色变为父节点的颜色，父节点和远侄节点变黑。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;兄弟节点是黑色，近侄节点为红，远侄节点为黑&lt;/strong&gt;：旋转兄弟节点，近侄节点变黑，兄弟节点变红。转换为兄弟节点为黑，远侄节点为红。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;兄弟节点为黑，且侄节点全黑&lt;/strong&gt;：兄弟节点变红，将问题上移至父节点，递归处理。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;兄弟节点为红&lt;/strong&gt;：旋转父节点，兄弟节点变黑，父节点变红，转换成兄弟节点为黑的情况。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;code&gt;例1：&lt;/code&gt;删除节点 70。兄弟节点 100 是黑色，近侄节点 90 是红色，远侄节点 null 是黑色，为情况 2。删除节点 70 后，使用 null 节点代替，作为当前节点。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt=" " class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="232" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-12_10-41-41_822nDf7s6i.png" width="412"&gt;&#10;&lt;img alt=" " class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="232" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-12_10-42-03_Ut1nIZhITM.png" width="412"&gt;&lt;/p&gt;&#10;&lt;p&gt;兄弟节点 100 右旋，近侄节点 90 变黑，兄弟节点 100 变红。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt=" " class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="232" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-12_10-42-33_RAaz-XgwOH.png" width="412"&gt;&#10;&lt;img class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="232" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-12_10-42-54_EFU7raX0a7.png" width="412"&gt;&lt;/p&gt;&#10;&lt;p&gt;此时并没有调整完成，以 null 节点为目标节点，转换成兄弟节点 90 为黑，远侄节点 100 为红的情况。左旋父节点 80，兄弟节点 90 颜色变为父节点 80 的颜色（此处为黑色），父节点 80 和远侄节点 100 变黑。&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="232" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-12_10-47-25_R72TaJHCat.png" width="412"&gt;&#10;&lt;img class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="232" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-12_10-47-34_-n2GuW0NB7.png" width="412"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;例2：&lt;/code&gt;删除节点 120。兄弟节点是红色，为情况 4。删除节点 120 后，使用 null 节点代替，作为当前节点。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt=" " class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="232" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-12_10-14-08_b6qMH6BP-F.png" width="412"&gt;&#10;&lt;img alt=" " class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="232" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-12_10-14-57_EJTNuXKBCI.png" width="412"&gt;&lt;/p&gt;&#10;&lt;p&gt;右旋父节点 100，兄弟节点 80 变黑，父节点 100 变红。&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="232" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-12_10-36-23_4nTHWTBetU.png" width="412"&gt;&#10;&lt;img alt=" " class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="232" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-12_10-20-09_hRrx4gupDs.png" width="412"&gt;&lt;/p&gt;&#10;&lt;p&gt;此时并没有调整完成，以 null 节点为目标节点，转换成兄弟节点 90 为黑，侄节点全黑的情况。兄弟节点 90 变红，并递归检查。&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="232" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-12_10-33-15_xwYcqnW7Ik.png" width="412"&gt;&lt;/p&gt;&#10;&lt;h3 id="删除只包含一个子节点的黑色节点该节点只可能是红色节点"&gt;&lt;a href="#%e5%88%a0%e9%99%a4%e5%8f%aa%e5%8c%85%e5%90%ab%e4%b8%80%e4%b8%aa%e5%ad%90%e8%8a%82%e7%82%b9%e7%9a%84%e9%bb%91%e8%89%b2%e8%8a%82%e7%82%b9%e8%af%a5%e8%8a%82%e7%82%b9%e5%8f%aa%e5%8f%af%e8%83%bd%e6%98%af%e7%ba%a2%e8%89%b2%e8%8a%82%e7%82%b9" class="header-anchor"&gt;&lt;/a&gt;删除只包含一个子节点的黑色节点，该节点只可能是红色节点&#10;&lt;/h3&gt;&lt;p&gt;只包含一个子节点时，这是唯一情况。目标节点为红色或者子节点为黑色，都会破坏红黑树的性质。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;🧋 目标节点替换为红色子节点，且子节点变为黑色。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="273px" data-flex-grow="114" height="206" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-11_12-39-47_tGIi43hMja.png" width="235"&gt;&#10;&lt;img class="gallery-image" data-flex-basis="273px" data-flex-grow="114" height="206" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-11_12-39-59_dnh63OG8ei.png" width="235"&gt;&lt;/p&gt;&#10;&lt;h3 id="删除包含两个子节点的节点不论红黑"&gt;&lt;a href="#%e5%88%a0%e9%99%a4%e5%8c%85%e5%90%ab%e4%b8%a4%e4%b8%aa%e5%ad%90%e8%8a%82%e7%82%b9%e7%9a%84%e8%8a%82%e7%82%b9%e4%b8%8d%e8%ae%ba%e7%ba%a2%e9%bb%91" class="header-anchor"&gt;&lt;/a&gt;删除包含两个子节点的节点（不论红黑）&#10;&lt;/h3&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;🧋 使用「左子树的最右节点&lt;sup id="fnref:6"&gt;&lt;a href="#fn:6" class="footnote-ref" role="doc-noteref"&gt;6&lt;/a&gt;&lt;/sup&gt;」代替该节点，颜色保持一致，仅替换内容。然后删除最右节点（跳转其他情况）。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;img alt="原始树 原始树 " class="gallery-image" data-flex-basis="384px" data-flex-grow="160" data-title-escaped="原始树 原始树" height="304" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-11_17-05-40_A1yrPdYsZC.png" title="原始树 原始树" width="487"&gt;&#10;&lt;img alt="使用左子树的最右节点替换当前节点 使用左子树的最右节点替换当前节点 " class="gallery-image" data-flex-basis="384px" data-flex-grow="160" data-title-escaped="使用左子树的最右节点替换当前节点 使用左子树的最右节点替换当前节点" height="304" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-11_17-06-03_u7J4LaHmEi.png" title="使用左子树的最右节点替换当前节点 使用左子树的最右节点替换当前节点" width="487"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="调整树的结构 调整树的结构 " class="gallery-image" data-flex-basis="384px" data-flex-grow="160" data-title-escaped="调整树的结构 调整树的结构" height="304" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-11_17-05-15_l7RxXM2Rc_.gif" title="调整树的结构 调整树的结构" width="487"&gt;&#10;&lt;img alt="调整后的树 调整后的树 " class="gallery-image" data-flex-basis="384px" data-flex-grow="160" data-title-escaped="调整后的树 调整后的树" height="304" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/%E7%BA%A2%E9%BB%91%E6%A0%91/assets/PixPin_2025-05-11_17-05-34_snwoW7gw9z.png" title="调整后的树 调整后的树" width="487"&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://zhuanlan.zhihu.com/p/166319823" title="红黑树的原理 (插入&amp;#43; 删除) 案例分析"&#10; target="_blank" rel="noopener"&#10; &gt;红黑树的原理 (插入+ 删除) 案例分析&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.cs.usfca.edu/~galles/visualization/RedBlack.html" title="红黑树可视化网站"&#10; target="_blank" rel="noopener"&#10; &gt;红黑树可视化网站&lt;/a&gt;&lt;/p&gt;&#10;&lt;div class="footnotes" role="doc-endnotes"&gt;&#10;&lt;hr&gt;&#10;&lt;ol&gt;&#10;&lt;li id="fn:1"&gt;&#10;&lt;p&gt;红色节点不会连续出现&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li id="fn:2"&gt;&#10;&lt;p&gt;可能违反违反性质 4&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li id="fn:3"&gt;&#10;&lt;p&gt;可能违反性质 4，一定违反性质 5&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li id="fn:4"&gt;&#10;&lt;p&gt;左旋「父节点」之后，已经转化成了 LL 型的情况。&amp;#160;&lt;a href="#fnref:4" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li id="fn:5"&gt;&#10;&lt;p&gt;右旋「父节点」之后，已经转化成了 RR 型的情况。&amp;#160;&lt;a href="#fnref:5" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li id="fn:6"&gt;&#10;&lt;p&gt;也可以右子树的最左节点&amp;#160;&lt;a href="#fnref:6" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/div&gt;&#10;</description></item></channel></rss>