mirror of
https://github.com/krahets/hello-algo.git
synced 2026-07-21 11:06:07 +00:00
deploy
This commit is contained in:
@@ -4303,7 +4303,7 @@
|
||||
<a id="__codelineno-25-7" name="__codelineno-25-7" href="#__codelineno-25-7"></a><span class="cm">/* 更新节点高度 */</span>
|
||||
<a id="__codelineno-25-8" name="__codelineno-25-8" href="#__codelineno-25-8"></a><span class="kd">fun</span><span class="w"> </span><span class="nf">updateHeight</span><span class="p">(</span><span class="n">node</span><span class="p">:</span><span class="w"> </span><span class="n">TreeNode?)</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-25-9" name="__codelineno-25-9" href="#__codelineno-25-9"></a><span class="w"> </span><span class="c1">// 节点高度等于最高子树高度 + 1</span>
|
||||
<a id="__codelineno-25-10" name="__codelineno-25-10" href="#__codelineno-25-10"></a><span class="w"> </span><span class="n">node</span><span class="o">?.</span><span class="na">height</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">max</span><span class="p">(</span><span class="n">height</span><span class="p">(</span><span class="n">node</span><span class="o">?.</span><span class="na">left</span><span class="p">).</span><span class="na">toDouble</span><span class="p">(),</span><span class="w"> </span><span class="n">height</span><span class="p">(</span><span class="n">node</span><span class="o">?.</span><span class="na">right</span><span class="p">).</span><span class="na">toDouble</span><span class="p">())</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="m">1</span><span class="p">).</span><span class="na">toInt</span><span class="p">()</span>
|
||||
<a id="__codelineno-25-10" name="__codelineno-25-10" href="#__codelineno-25-10"></a><span class="w"> </span><span class="n">node</span><span class="o">?.</span><span class="na">height</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">max</span><span class="p">(</span><span class="n">height</span><span class="p">(</span><span class="n">node</span><span class="o">?.</span><span class="na">left</span><span class="p">),</span><span class="w"> </span><span class="n">height</span><span class="p">(</span><span class="n">node</span><span class="o">?.</span><span class="na">right</span><span class="p">))</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="m">1</span>
|
||||
<a id="__codelineno-25-11" name="__codelineno-25-11" href="#__codelineno-25-11"></a><span class="p">}</span>
|
||||
</code></pre></div>
|
||||
</div>
|
||||
@@ -5753,16 +5753,18 @@
|
||||
<a id="__codelineno-95-9" name="__codelineno-95-9" href="#__codelineno-95-9"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">TreeNode</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
||||
<a id="__codelineno-95-10" name="__codelineno-95-10" href="#__codelineno-95-10"></a><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">node</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">n</span>
|
||||
<a id="__codelineno-95-11" name="__codelineno-95-11" href="#__codelineno-95-11"></a><span class="w"> </span><span class="cm">/* 1. 查找插入位置并插入节点 */</span>
|
||||
<a id="__codelineno-95-12" name="__codelineno-95-12" href="#__codelineno-95-12"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">value</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">value</span><span class="p">)</span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">left</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">insertHelper</span><span class="p">(</span><span class="n">node</span><span class="p">.</span><span class="na">left</span><span class="p">,</span><span class="w"> </span><span class="n">value</span><span class="p">)</span>
|
||||
<a id="__codelineno-95-13" name="__codelineno-95-13" href="#__codelineno-95-13"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">value</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">value</span><span class="p">)</span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">right</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">insertHelper</span><span class="p">(</span><span class="n">node</span><span class="p">.</span><span class="na">right</span><span class="p">,</span><span class="w"> </span><span class="n">value</span><span class="p">)</span>
|
||||
<a id="__codelineno-95-14" name="__codelineno-95-14" href="#__codelineno-95-14"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">node</span><span class="w"> </span><span class="c1">// 重复节点不插入,直接返回</span>
|
||||
<a id="__codelineno-95-15" name="__codelineno-95-15" href="#__codelineno-95-15"></a>
|
||||
<a id="__codelineno-95-16" name="__codelineno-95-16" href="#__codelineno-95-16"></a><span class="w"> </span><span class="n">updateHeight</span><span class="p">(</span><span class="n">node</span><span class="p">)</span><span class="w"> </span><span class="c1">// 更新节点高度</span>
|
||||
<a id="__codelineno-95-17" name="__codelineno-95-17" href="#__codelineno-95-17"></a><span class="w"> </span><span class="cm">/* 2. 执行旋转操作,使该子树重新恢复平衡 */</span>
|
||||
<a id="__codelineno-95-18" name="__codelineno-95-18" href="#__codelineno-95-18"></a><span class="w"> </span><span class="n">node</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rotate</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
|
||||
<a id="__codelineno-95-19" name="__codelineno-95-19" href="#__codelineno-95-19"></a><span class="w"> </span><span class="c1">// 返回子树的根节点</span>
|
||||
<a id="__codelineno-95-20" name="__codelineno-95-20" href="#__codelineno-95-20"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">node</span>
|
||||
<a id="__codelineno-95-21" name="__codelineno-95-21" href="#__codelineno-95-21"></a><span class="p">}</span>
|
||||
<a id="__codelineno-95-12" name="__codelineno-95-12" href="#__codelineno-95-12"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">value</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">value</span><span class="p">)</span>
|
||||
<a id="__codelineno-95-13" name="__codelineno-95-13" href="#__codelineno-95-13"></a><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">left</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">insertHelper</span><span class="p">(</span><span class="n">node</span><span class="p">.</span><span class="na">left</span><span class="p">,</span><span class="w"> </span><span class="n">value</span><span class="p">)</span>
|
||||
<a id="__codelineno-95-14" name="__codelineno-95-14" href="#__codelineno-95-14"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">value</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">value</span><span class="p">)</span>
|
||||
<a id="__codelineno-95-15" name="__codelineno-95-15" href="#__codelineno-95-15"></a><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">right</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">insertHelper</span><span class="p">(</span><span class="n">node</span><span class="p">.</span><span class="na">right</span><span class="p">,</span><span class="w"> </span><span class="n">value</span><span class="p">)</span>
|
||||
<a id="__codelineno-95-16" name="__codelineno-95-16" href="#__codelineno-95-16"></a><span class="w"> </span><span class="k">else</span>
|
||||
<a id="__codelineno-95-17" name="__codelineno-95-17" href="#__codelineno-95-17"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">node</span><span class="w"> </span><span class="c1">// 重复节点不插入,直接返回</span>
|
||||
<a id="__codelineno-95-18" name="__codelineno-95-18" href="#__codelineno-95-18"></a><span class="w"> </span><span class="n">updateHeight</span><span class="p">(</span><span class="n">node</span><span class="p">)</span><span class="w"> </span><span class="c1">// 更新节点高度</span>
|
||||
<a id="__codelineno-95-19" name="__codelineno-95-19" href="#__codelineno-95-19"></a><span class="w"> </span><span class="cm">/* 2. 执行旋转操作,使该子树重新恢复平衡 */</span>
|
||||
<a id="__codelineno-95-20" name="__codelineno-95-20" href="#__codelineno-95-20"></a><span class="w"> </span><span class="n">node</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rotate</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
|
||||
<a id="__codelineno-95-21" name="__codelineno-95-21" href="#__codelineno-95-21"></a><span class="w"> </span><span class="c1">// 返回子树的根节点</span>
|
||||
<a id="__codelineno-95-22" name="__codelineno-95-22" href="#__codelineno-95-22"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">node</span>
|
||||
<a id="__codelineno-95-23" name="__codelineno-95-23" href="#__codelineno-95-23"></a><span class="p">}</span>
|
||||
</code></pre></div>
|
||||
</div>
|
||||
<div class="tabbed-block">
|
||||
@@ -6306,30 +6308,38 @@
|
||||
<a id="__codelineno-109-7" name="__codelineno-109-7" href="#__codelineno-109-7"></a><span class="kd">fun</span><span class="w"> </span><span class="nf">removeHelper</span><span class="p">(</span><span class="n">n</span><span class="p">:</span><span class="w"> </span><span class="n">TreeNode?,</span><span class="w"> </span><span class="n">value</span><span class="p">:</span><span class="w"> </span><span class="kt">Int</span><span class="p">):</span><span class="w"> </span><span class="n">TreeNode? </span><span class="p">{</span>
|
||||
<a id="__codelineno-109-8" name="__codelineno-109-8" href="#__codelineno-109-8"></a><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">node</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">?:</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">null</span>
|
||||
<a id="__codelineno-109-9" name="__codelineno-109-9" href="#__codelineno-109-9"></a><span class="w"> </span><span class="cm">/* 1. 查找节点并删除 */</span>
|
||||
<a id="__codelineno-109-10" name="__codelineno-109-10" href="#__codelineno-109-10"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">value</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">value</span><span class="p">)</span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">left</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">removeHelper</span><span class="p">(</span><span class="n">node</span><span class="p">.</span><span class="na">left</span><span class="p">,</span><span class="w"> </span><span class="n">value</span><span class="p">)</span>
|
||||
<a id="__codelineno-109-11" name="__codelineno-109-11" href="#__codelineno-109-11"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">value</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">value</span><span class="p">)</span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">right</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">removeHelper</span><span class="p">(</span><span class="n">node</span><span class="p">.</span><span class="na">right</span><span class="p">,</span><span class="w"> </span><span class="n">value</span><span class="p">)</span>
|
||||
<a id="__codelineno-109-12" name="__codelineno-109-12" href="#__codelineno-109-12"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-109-13" name="__codelineno-109-13" href="#__codelineno-109-13"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">node</span><span class="p">.</span><span class="na">left</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">right</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-109-14" name="__codelineno-109-14" href="#__codelineno-109-14"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">child</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">node</span><span class="p">.</span><span class="na">left</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">left</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">right</span>
|
||||
<a id="__codelineno-109-15" name="__codelineno-109-15" href="#__codelineno-109-15"></a><span class="w"> </span><span class="c1">// 子节点数量 = 0 ,直接删除 node 并返回</span>
|
||||
<a id="__codelineno-109-16" name="__codelineno-109-16" href="#__codelineno-109-16"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">child</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">null</span>
|
||||
<a id="__codelineno-109-17" name="__codelineno-109-17" href="#__codelineno-109-17"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="n">node</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">child</span>
|
||||
<a id="__codelineno-109-18" name="__codelineno-109-18" href="#__codelineno-109-18"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-109-19" name="__codelineno-109-19" href="#__codelineno-109-19"></a><span class="w"> </span><span class="c1">// 子节点数量 = 2 ,则将中序遍历的下个节点删除,并用该节点替换当前节点</span>
|
||||
<a id="__codelineno-109-20" name="__codelineno-109-20" href="#__codelineno-109-20"></a><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">temp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">right</span>
|
||||
<a id="__codelineno-109-21" name="__codelineno-109-21" href="#__codelineno-109-21"></a><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">temp</span><span class="o">!!</span><span class="p">.</span><span class="na">left</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-109-22" name="__codelineno-109-22" href="#__codelineno-109-22"></a><span class="w"> </span><span class="n">temp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">temp</span><span class="p">.</span><span class="na">left</span>
|
||||
<a id="__codelineno-109-23" name="__codelineno-109-23" href="#__codelineno-109-23"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-109-24" name="__codelineno-109-24" href="#__codelineno-109-24"></a><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">right</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">removeHelper</span><span class="p">(</span><span class="n">node</span><span class="p">.</span><span class="na">right</span><span class="p">,</span><span class="w"> </span><span class="n">temp</span><span class="p">.</span><span class="na">value</span><span class="p">)</span>
|
||||
<a id="__codelineno-109-25" name="__codelineno-109-25" href="#__codelineno-109-25"></a><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">temp</span><span class="p">.</span><span class="na">value</span>
|
||||
<a id="__codelineno-109-26" name="__codelineno-109-26" href="#__codelineno-109-26"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-109-27" name="__codelineno-109-27" href="#__codelineno-109-27"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-109-28" name="__codelineno-109-28" href="#__codelineno-109-28"></a><span class="w"> </span><span class="n">updateHeight</span><span class="p">(</span><span class="n">node</span><span class="p">)</span><span class="w"> </span><span class="c1">// 更新节点高度</span>
|
||||
<a id="__codelineno-109-29" name="__codelineno-109-29" href="#__codelineno-109-29"></a><span class="w"> </span><span class="cm">/* 2. 执行旋转操作,使该子树重新恢复平衡 */</span>
|
||||
<a id="__codelineno-109-30" name="__codelineno-109-30" href="#__codelineno-109-30"></a><span class="w"> </span><span class="n">node</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rotate</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
|
||||
<a id="__codelineno-109-31" name="__codelineno-109-31" href="#__codelineno-109-31"></a><span class="w"> </span><span class="c1">// 返回子树的根节点</span>
|
||||
<a id="__codelineno-109-32" name="__codelineno-109-32" href="#__codelineno-109-32"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">node</span>
|
||||
<a id="__codelineno-109-33" name="__codelineno-109-33" href="#__codelineno-109-33"></a><span class="p">}</span>
|
||||
<a id="__codelineno-109-10" name="__codelineno-109-10" href="#__codelineno-109-10"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">value</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">value</span><span class="p">)</span>
|
||||
<a id="__codelineno-109-11" name="__codelineno-109-11" href="#__codelineno-109-11"></a><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">left</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">removeHelper</span><span class="p">(</span><span class="n">node</span><span class="p">.</span><span class="na">left</span><span class="p">,</span><span class="w"> </span><span class="n">value</span><span class="p">)</span>
|
||||
<a id="__codelineno-109-12" name="__codelineno-109-12" href="#__codelineno-109-12"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">value</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">value</span><span class="p">)</span>
|
||||
<a id="__codelineno-109-13" name="__codelineno-109-13" href="#__codelineno-109-13"></a><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">right</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">removeHelper</span><span class="p">(</span><span class="n">node</span><span class="p">.</span><span class="na">right</span><span class="p">,</span><span class="w"> </span><span class="n">value</span><span class="p">)</span>
|
||||
<a id="__codelineno-109-14" name="__codelineno-109-14" href="#__codelineno-109-14"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-109-15" name="__codelineno-109-15" href="#__codelineno-109-15"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">node</span><span class="p">.</span><span class="na">left</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">right</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-109-16" name="__codelineno-109-16" href="#__codelineno-109-16"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">child</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">node</span><span class="p">.</span><span class="na">left</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span>
|
||||
<a id="__codelineno-109-17" name="__codelineno-109-17" href="#__codelineno-109-17"></a><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">left</span>
|
||||
<a id="__codelineno-109-18" name="__codelineno-109-18" href="#__codelineno-109-18"></a><span class="w"> </span><span class="k">else</span>
|
||||
<a id="__codelineno-109-19" name="__codelineno-109-19" href="#__codelineno-109-19"></a><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">right</span>
|
||||
<a id="__codelineno-109-20" name="__codelineno-109-20" href="#__codelineno-109-20"></a><span class="w"> </span><span class="c1">// 子节点数量 = 0 ,直接删除 node 并返回</span>
|
||||
<a id="__codelineno-109-21" name="__codelineno-109-21" href="#__codelineno-109-21"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">child</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span>
|
||||
<a id="__codelineno-109-22" name="__codelineno-109-22" href="#__codelineno-109-22"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">null</span>
|
||||
<a id="__codelineno-109-23" name="__codelineno-109-23" href="#__codelineno-109-23"></a><span class="w"> </span><span class="c1">// 子节点数量 = 1 ,直接删除 node</span>
|
||||
<a id="__codelineno-109-24" name="__codelineno-109-24" href="#__codelineno-109-24"></a><span class="w"> </span><span class="k">else</span>
|
||||
<a id="__codelineno-109-25" name="__codelineno-109-25" href="#__codelineno-109-25"></a><span class="w"> </span><span class="n">node</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">child</span>
|
||||
<a id="__codelineno-109-26" name="__codelineno-109-26" href="#__codelineno-109-26"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-109-27" name="__codelineno-109-27" href="#__codelineno-109-27"></a><span class="w"> </span><span class="c1">// 子节点数量 = 2 ,则将中序遍历的下个节点删除,并用该节点替换当前节点</span>
|
||||
<a id="__codelineno-109-28" name="__codelineno-109-28" href="#__codelineno-109-28"></a><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">temp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">right</span>
|
||||
<a id="__codelineno-109-29" name="__codelineno-109-29" href="#__codelineno-109-29"></a><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">temp</span><span class="o">!!</span><span class="p">.</span><span class="na">left</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-109-30" name="__codelineno-109-30" href="#__codelineno-109-30"></a><span class="w"> </span><span class="n">temp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">temp</span><span class="p">.</span><span class="na">left</span>
|
||||
<a id="__codelineno-109-31" name="__codelineno-109-31" href="#__codelineno-109-31"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-109-32" name="__codelineno-109-32" href="#__codelineno-109-32"></a><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">right</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">removeHelper</span><span class="p">(</span><span class="n">node</span><span class="p">.</span><span class="na">right</span><span class="p">,</span><span class="w"> </span><span class="n">temp</span><span class="p">.</span><span class="na">value</span><span class="p">)</span>
|
||||
<a id="__codelineno-109-33" name="__codelineno-109-33" href="#__codelineno-109-33"></a><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="na">value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">temp</span><span class="p">.</span><span class="na">value</span>
|
||||
<a id="__codelineno-109-34" name="__codelineno-109-34" href="#__codelineno-109-34"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-109-35" name="__codelineno-109-35" href="#__codelineno-109-35"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-109-36" name="__codelineno-109-36" href="#__codelineno-109-36"></a><span class="w"> </span><span class="n">updateHeight</span><span class="p">(</span><span class="n">node</span><span class="p">)</span><span class="w"> </span><span class="c1">// 更新节点高度</span>
|
||||
<a id="__codelineno-109-37" name="__codelineno-109-37" href="#__codelineno-109-37"></a><span class="w"> </span><span class="cm">/* 2. 执行旋转操作,使该子树重新恢复平衡 */</span>
|
||||
<a id="__codelineno-109-38" name="__codelineno-109-38" href="#__codelineno-109-38"></a><span class="w"> </span><span class="n">node</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rotate</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
|
||||
<a id="__codelineno-109-39" name="__codelineno-109-39" href="#__codelineno-109-39"></a><span class="w"> </span><span class="c1">// 返回子树的根节点</span>
|
||||
<a id="__codelineno-109-40" name="__codelineno-109-40" href="#__codelineno-109-40"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">node</span>
|
||||
<a id="__codelineno-109-41" name="__codelineno-109-41" href="#__codelineno-109-41"></a><span class="p">}</span>
|
||||
</code></pre></div>
|
||||
</div>
|
||||
<div class="tabbed-block">
|
||||
|
||||
Reference in New Issue
Block a user