数据结构之平衡二叉树树

1.平衡二叉树

1.1 AVL树的定义

  • 定义:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

1.2 AVL树平衡因子

  • 定义:某结点的左子树与右子树的高度(深度)差即为该结点的平衡因子。平衡二叉树上所有结点的平衡因子只可能是 -1,0 或 1。如果某一结点的平衡因子绝对值大于1则说明此树不是平衡二叉树。为了方便计算每一结点的平衡因子可以为每个节点赋予height这一属性,表示此节点的高度。

1.3 AVL树添加节点

  • 定义:往平衡二叉树中添加节点或者删除节点很可能会导致二叉树失去平衡,所以我们需要在每次插入节点后进行平衡的维护操作。当插入新结点导致不平衡时, 我们需要找到距离新节点最近的不平衡结点为轴来转动AVL树来达到平衡。插入节点破坏平衡性有如下四种情况:
  • 左子树的左子树插入结点(LL):以图为例,节点2是节点6的左子树的左子树。调整方法:右旋。
  • 右子树的右子树插入节点 (RR):以图为例,节点9是节点6的右子树的右子树。调整方法:左旋。
  • 左子树的右子树插入结点(LR):以图为例,节点6是节点8的左子树的右子树。调整方法:先左旋,再右旋。
  • 右子树的左子树插入结点(RL):以图为例,节点12是节点10的右子树的左子树。调整方法:先右旋,再左旋。

1.4 AVL树删除节点

  • AVL树是一种特殊的二叉搜索树,所以要考虑的情况和二叉搜索树删除结点一样, 不同的是删除一个结点有可能引起父结点失衡, 所以我们需要在每次回退的时候计算结点高度。二叉排序树 这篇文章有相关介绍。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值