自平衡二叉树(AVL)及四种旋转方式详解

推荐可视化插入、删除节点的二叉树网站:AVL Tree Visualzation (usfca.edu)

1. 概述

自平衡二叉树(AVL)及四种旋转方式详解_第1张图片

        AVL树是一种自平衡二叉搜索树,他是搜索二叉树(BST)的优化,它在每次插入或删除操作后,通过旋转节点来保持树的平衡性。AVL树的平衡条件是任意节点的左子树和右子树的高度差平衡因子p)不超过1,即平衡因子可以是-1、0或1。

p =Height(Tl) - Height(Tr)

2. AVL树的特点

  1. 平衡性:AVL树的平衡性保证了查找、插入和删除操作的时间复杂度为O(log n),其中n是树中节点的数量。
  2. 自平衡操作:当进行插入或删除操作时,AVL树会根据平衡因子的变化,进行旋转操作来调整节点的位置,以维持树的平衡性。

3.  AVL树的旋转操作

        如果插入导致不平衡,则需要对以插入路径上离插入节点最近的平衡因子绝对值大于1的节点为根的节点的树进行调整,有以下几种调整方式:

对于下图,如果插入节点7,就是以 节点9 为根路径进行调整:

自平衡二叉树(AVL)及四种旋转方式详解_第2张图片

 

(1)左旋(Left Rotation)

        在某个子树的左子树的左子树上插入新节点,导致根节点的平衡因子由1变成2。

自平衡二叉树(AVL)及四种旋转方式详解_第3张图片

自平衡二叉树(AVL)及四种旋转方式详解_第4张图片

(2)右旋(Right Rotation)

在某个子树的右子树的右子树上插入新节点,导致根节点的平衡因子由-1 变成 -2。

自平衡二叉树(AVL)及四种旋转方式详解_第5张图片自平衡二叉树(AVL)及四种旋转方式详解_第6张图片 

 (3)左右旋(Left-Right Rotation)

在某个子树的左子树的右子树上插入新节点,导致根节点的平衡因子由-1 变成 -2。

自平衡二叉树(AVL)及四种旋转方式详解_第7张图片

自平衡二叉树(AVL)及四种旋转方式详解_第8张图片

(4)右左旋(Right-Left Rotation)

在某个子树的右子树的左子树上插入新节点,导致根节点的平衡因子由-1 变成 -2。

自平衡二叉树(AVL)及四种旋转方式详解_第9张图片

4. AVL树的插入

示例:向一棵空的AVL树中插入 1,2,3,4,5,6,7 七个数字:

 (1)插入1,2

自平衡二叉树(AVL)及四种旋转方式详解_第10张图片

(2)插入3,需要右旋

 自平衡二叉树(AVL)及四种旋转方式详解_第11张图片——>自平衡二叉树(AVL)及四种旋转方式详解_第12张图片

 (4)插入4

自平衡二叉树(AVL)及四种旋转方式详解_第13张图片

(5)插入5 ,需要右旋

 自平衡二叉树(AVL)及四种旋转方式详解_第14张图片——>自平衡二叉树(AVL)及四种旋转方式详解_第15张图片

(6)插入6,需要右旋

 自平衡二叉树(AVL)及四种旋转方式详解_第16张图片——>自平衡二叉树(AVL)及四种旋转方式详解_第17张图片

(7)插入7,需要右旋

 自平衡二叉树(AVL)及四种旋转方式详解_第18张图片——>自平衡二叉树(AVL)及四种旋转方式详解_第19张图片

 

 

 

 

你可能感兴趣的:(算法与数据结构,数据结构,AVL树)