<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>AVL on Archai&#39;s home</title>
    <link>https://blog.archai.space/tags/avl/</link>
    <description>Recent content in AVL on Archai&#39;s home</description>
    <generator>Hugo -- gohugo.io</generator>
    <lastBuildDate>Sun, 23 May 2021 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.archai.space/tags/avl/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>AVL树</title>
      <link>https://blog.archai.space/p/avl%E6%A0%91/</link>
      <pubDate>Sun, 23 May 2021 00:00:00 +0000</pubDate>
      
      <guid>https://blog.archai.space/p/avl%E6%A0%91/</guid>
      <description>平衡二叉树是Adelson-Velsky和 Landis发明，故命名为AVL树。也称平衡二叉查找树。
 ✨特点： ①左子树&amp;lt;根&amp;lt;右子树； ②任一节点，左右子树高度之差不超过1.
平衡因子 $平衡因子=左子树高-右子树高$
AVL树的插入操作 AVL树插入新结点导致不平衡之后，只需将最小不平衡子树平衡，其他祖先结点会随之恢复平衡。
调整最小不平衡子树 注意：调整过后必须保证其BST的特性，即“左子树1.LL  即在以A为根节点的树的左孩子B的左子树上插入新结点，导致A成为最小不平衡子树。
 
调整过程如下：

2.RR  即在以A为根节点的树的右孩子B的右子树上插入新结点，导致A成为最小不平衡子树。
 
调整过程如下：

3.LR  即在以A为根节点的树的左孩子B的右子树上插入新结点，导致A成为最小不平衡子树。
 
观察得知，所进行的调整就是保证$|平衡因子|&amp;lt;=1$，因此若插入操作使得
左 - 右 &amp;gt; 1 =&amp;gt; 右旋
右 - 左 &amp;gt; 1 =&amp;gt;左旋
而当进行了LR插入操作之后，导致以A为根节点的树 左-右&amp;gt;1，理应右旋但是，由上述结果可知，经过右旋之后：

可以看到，为了保证其左子树&amp;lt;根&amp;lt;右子树的特性，经过调整后，依然存在右-左&amp;gt;1的问题；
因此，对于LR型不能简单进行右旋调整，应该先将其转化为LL型 (左旋)，再进行右旋；
为此，我们需要将BR结点展开，之后旋转成为LL型插入

可以看到，展开后又出现两种插入情况CL&amp;amp;CR，但其实两者处理大同小异：
CR插入调整过程如下：

4.RL  即在以A为根节点的树的右孩子B的左子树上插入新结点，导致A成为最小不平衡子树。
 
参考LR型，其调整过程如下：

查找操作效率分析 Assuming that, $n_h$表示深度为h的平衡树中含有的最少结点，则
$n_0=0$,$n_1=1$,$n_2=2$&amp;hellip;存在递归关系 $n_h=n_{h-1}+n_{h-2}+1$,即左右子树结点之和+根节点。
可以证明(AVL证明)，n个结点的平衡二叉树最大深度数量级为$\log_2n$，则其查找操作的复杂度为$O(\log_2n)$</description>
    </item>
    
  </channel>
</rss>
