pyton实现平衡二叉树

本文介绍了平衡二叉树的概念,特别是AVL树。平衡二叉树是一种特殊的二叉搜索树,保证了左右子树的高度差不超过1,从而避免最坏情况下的性能下降。文章详细阐述了在插入节点时如何判断并调整平衡,包括左旋、右旋以及LR和RL情况的处理。最后提供了完整的Python代码实现。
摘要由CSDN通过智能技术生成

二叉搜索树在最坏情况下会形成一条链,平衡二叉树的出现解决了这个问题

概念

平衡二叉树,又被称为AVL树,且具有以下性质:

它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 —-来自百度百科

如下图,
在这里插入图片描述

如何构造平衡二叉树?

构造二叉树的时候,每次插入一个结点都去判断它是否平衡,如果不平衡就要调整,让它平衡。下面有四种调整情况:
下面四种情况,树的大小顺序规则(左孩子小于根结点,右孩子大于根结点)都不会被破坏

  • RR情况-----需要左旋
    RR:就是新插入的结点插在了失衡结点的右子树的右子树上
    调整:把失衡结点左旋
    在这里插入图片描述
    左旋步骤:
    令失衡结点为a,它的右孩子为b,令:
    a.right=b.left
    b.left=a
    在这里插入图片描述
    例:
    在这里插入图片描述
    对上图失衡结点 2 进行左旋,结果如下图
    在这里插入图片描述
  • LL情况-----右旋
    LL:就是新插入的结点插在了失衡结点的左子树的左子树上
    调整:把失衡结点右旋
    在这里插入图片描述
    步骤:令失衡结点为a,它的左孩子为b,
    a.left=b.right
    b.right=a
    在这里插入图片描述
    例:
    下图插入结点 1 之后,发现结点5失衡了,且插入的结点1在失衡结点5的左子树的左子树上,所以是LL情况,需要右旋
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值