AVL树删除

AVL Tree与BST

由于AVL树本身就是一颗自平衡的BST,因此其的删除比起BST仅仅多了删除后平衡的调整

 

查找:

AVL树中一定不存在两个值大小相同的节点

从AVL树根开始向下搜索,根据意图删除值与当前节点值大小关系进行下一步操作:

1、  当前节点值大于意图删除值,保存当前节点并在当前节点的左子树中继续查找意图删除值

2、  当前节点值小于意图删除值,保存当前节点并在当前节点的右子树中继续查找意图删除值

3、  当前节点值等于意图删除值,准备进行删除

查找的过程中保存当前节点,是为了便于回溯并修改、判断可能被删除影响的节点的平衡因子

删除:

根据意图删除节点的子树个数可以将删除分为三种情况:

1、  意图删除的节点没有子树(叶子节点)

2、  意图删除的节点有且仅有一个子树

3、  意图删除的节点既有左子树又有右子树

与BST的删除相同,这三种情况又可以概括为两种情况:

1、  意图删除节点最多存在一个子树

2、  意图删除节点存在两个子树

情况1的删除非常简单,就不解释了,情况2下需要将删除有两个子树的节点转换为删除仅有一个子树的节点:

使用意图删除节点的最大左子树值或者最小右子树值替换意图删除值,再删除替换值所在节点

删除完成后立即根据之前查找时保存的节点信息回溯(修改平衡因子并立即判断平衡因子)

调整平衡:

AVL树是否平衡是由平衡因子决定的,修改完平衡因子后应立即判断平衡因子,根据平衡因子的情况作下一步操作,回溯到的节点的平衡因子修改后立即判断平衡因子值:

1、  如果平衡因子为1 / -1则说明以其为根的树高度并没有改变,仅仅是其一个子树矮了,以其为子树

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值