AVL树---平衡的二叉查找树

AVL树是每个结点的左子树和右子树的高度最多差1的二叉查找树(空树的高度定义为-1)。

它能保持二叉树的高度平衡,尽量降低二叉树的高度,减少树的平均搜索长度。

AVL树的性质

  • 左子树和右子树的高度差不超过1
  • 每个结点的左子树和右子树都是AVL树
  • 每个结点都有一个平衡因子,任一结点的平衡因子是-1,0,1。每个结点的平衡因子等于右子树高度减去左子树的高度

AVL树是在二叉查找树的基础上建立的,我们知道二叉查找树在最坏情况下(每个结点只有左子树或右子树)增删查的时间复杂度是O(N),这种极端的情况下树是高度不平衡的。

在二叉查找树的基础上,如果使左右子树的高度差不超过1,即达到高度平衡的状态,此时增删查的时间复杂度为O(logN)(2为底数)。

为了让它保持高度平衡,我们引入了平衡因子,每个结点的平衡因子只可能是-1,0,1中的一个。

每次插入/删除一个结点,我们都需要向上更新一下新增结点/删除结点的祖先的平衡因子。一旦发现某个祖先的平衡因子变为2或者-2,我们就需要通过旋转来使这棵树保持AVL树的特性。

posted on 2019-04-22 14:40  shammgod_code  阅读(164)  评论(0编辑  收藏  举报

导航