AVL为什么LL的时候右转呢?
在AVL树中,当发生LL(左左)情况时,意味着某个节点的左子树的左子节点导致了不平衡。这种情况的特点是:
不平衡原因:插入的节点位于不平衡节点的左子树的左侧,导致该节点的左子树高度增加,平衡因子变为大于1。
右旋的必要性:通过右旋,可以将不平衡节点的左子节点提升为新的根节点,同时将原来的不平衡节点下移到右侧。这样可以有效地恢复树的平衡,同时保证二叉搜索树的性质。
示例
考虑一个AVL树,插入节点的顺序为 30
, 20
, 10
,树结构如下:
这里,节点
30
的左子树高度为2(节点20
和10
),右子树高度为0。因此,平衡因子为
2
(即左高度 - 右高度 > 1),表示树不平衡。
右旋操作
通过右旋 30
,得到新的结构:
在这个结构中,树的平衡得到了恢复,所有节点的平衡因子都在 -1 到 1 之间。
同时,二叉搜索树的性质依然保持,即节点的左子树小于根节点,右子树大于根节点。
总结
右旋是解决LL情况的一种有效手段,能通过提升左子节点来恢复AVL树的平衡,同时维护树的排序性质。这种操作使得插入、删除后的高度平衡能持续保持,从而确保查找和修改操作的高效性。
同理, RR的时候,左转也是一样。
Last updated