python AVL树基础

AVL树: AVL树是一颗自平衡的二叉搜索树

AVL 树具有以下性质:
根的左右子树的高度之差的绝对值不能超过1
根的左右子树都是平衡二叉树

度量
通过平衡因子(balancd factor , bf)来具体实现上述平衡二叉树的定义
每个节点的平衡因子是该节点左子树的高度减去右子树的高度

都是以左边看齐
在这里插入图片描述
左子树的高度减去,右子树的高度,所以是-1 右边沉的是负数
在这里插入图片描述

所以平衡因子是-1

在这里插入图片描述

平衡二叉树的新定义(从平衡因子的角度)

  • 若一课二叉树中所有节点的平衡因子的绝对值小于1或等于1,则该二叉树称为平衡二叉树
  • 平衡二叉树中节点的平衡因子取值为1、0或-1

在这里插入图片描述
这个就不是平衡二叉树

重要

插入一个节点可能会破坏AVL树的平衡,可以通过旋转操作来进行修正

插入一个节点后,只有从插入节点到根节点的路径上的节点的平衡可能被改变。我们需要找出第一个破坏了平衡条件的节点,称之为K。K的两颗子树的高度差2

不平衡的出现可能有4种情况

策略 :调整

  • LL型调整
  • RR型调整
  • LR型调整
  • RL型调整

在这里插入图片描述

谁的根节点引起的麻烦变成根节点

(1) LL型调整 --针对左孩子的左子树上插入引起的不平衡

当a为顶点 ,它的左子树时h+1 ,右子树时h
在这里插入图片描述
下面的图 插入一个值,左孩子就是3,右孩子是1 所以 3-1=2
在这里插入图片描述
原理就是保持中序

在这里插入图片描述
(2) RR型调整 — 针对右孩子的右子树上插入引起的不平衡

在这里插入图片描述

(3)LR 型调整 —针对 左孩子的右子树插入引起的不平衡

在这里插入图片描述
左孩子的右子树的加入一个i节点 (灰色的) 就变成h+1

c的高度就是h+2了 加B就是h+3
在这里插入图片描述

在这里插入图片描述

谁引起的麻烦的节点,变成根节点,原根节点的右选

(4) RL型调整 ---- 针对右孩子的左子树上插入引起的不平衡

先右旋 在左旋
在这里插入图片描述

谁的节点惹的麻烦,变成根节点,原根节点左旋

2、不平衡时由于对k的左孩子的左子树插入导致的:右旋
在这里插入图片描述

1、平衡是由于对K的右孩子的右子树插入导致的: 左旋
在这里插入图片描述

3.不平衡是由于对K的右孩子的左子树插入导致的: 先右选后左选

在这里插入图片描述

4、不平衡是由于对K的左孩子的右子树插入导致的 先左旋后右选

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟伟哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值