当前位置: 首页 > news >正文

十四、平衡二叉树

1、看一个案例(说明二叉排序树可能的问题)

给你一个数列{1,2,3,4,5,6},要求创建一棵二叉排序树(BST),并分析问题所在。
在这里插入图片描述
上面二叉排序树存在问题分析:

  • 左子树全部为空,从形式上看,更像一个单链表
  • 插入速度没有影响
  • 查询速度明显降低(因为需要依次比较),不能发挥BST的优势,因为每次还需要比较左子树,其查询速度比单链表还慢。
  • 解决方案-平衡二叉树(AVL)

2、基本介绍

1)平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树,可以保证查询效率较高。
2)具有以下特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL树、替罪羊树、Treap、伸展树等。
3)举例说明,看看下面哪些是AVL树?
在这里插入图片描述

3、应用案例:单旋转(左旋转)

1)要求:给你一个数列,创建出对应的平衡二叉树,数列{4,3,6,5,7,8}
2)思路分析(示意图)
在这里插入图片描述

4、应用案例:单旋转(右旋转)

1)要求:给你一个数列,创建出对应的平衡二叉树,数列{10,12,8,9,7,6}
2)思路分析(示意图)
在这里插入图片描述

5、应用案例:双旋转

在这里插入图片描述
解决思路分析:

当符合右旋转条件时,如果它的左子树的右子树的高度大于它的左子树高度,先对当前这个节点的左节点进行旋转,在对当前节点进行右旋转的操作即可

6、完整代码

http://www.lryc.cn/news/7961.html

相关文章:

  • AC/DC 基础
  • 集成电路相关书籍
  • 前端开发之防抖与节流
  • 大公司如何用A/B测试解决增长问题?
  • 【Airplay_BCT】Bonjour API架构
  • 为什么sleeping的会话会造成阻塞(2)
  • 从矩阵中提取对角线元素;将一维数组转换为对角线矩阵:np.diag()函数
  • JavaSE学习day7_02 封装和构造方法
  • 2022年FIT2CLOUD飞致云开源成绩单
  • 【Python】asyncio使用注意事项
  • 成都链安受邀参加第五届CCF中国区块链技术大会
  • 验证码识别--封装版
  • 创建Wails项目
  • 深度解析UG二次开发装配的部件事件、部件原型和部件实例
  • Linux安装elasticsearch-head
  • MySQL InnoDB表的碎片量化和整理(data free能否用来衡量碎片?)
  • Leetcode-每日一题1250. 检查「好数组」(裴蜀定理)
  • OpenStack手动分布式部署环境准备【Queens版】
  • Web自动化测试——selenium的使用
  • 虚拟交换单元技术
  • 【STM32笔记】HAL库外部定时器、系统定时器阻塞、非阻塞延时
  • [Springboot 单元测试笔记] - Mock 和 spy的使用
  • 互联网新时代要来了(二)什么是AIGC?
  • 75V的TVS二极管有哪些型号?常用的
  • 测试开发之Django实战示例 第十章 创建在线教育平台
  • Hadoop高可用搭建(二)
  • 如何用企微SCRM管理系统发掘老客户的新增长点?
  • 我用python疯狂爬取公司数据
  • EMR集群运行TPC-DS在云盘和OSS中的对比
  • 菜鸟在 windows 下 python 中安装 jupyter 踩坑要点 、被神化的 VsCode