AVL树是带有平衡条件的二叉查找树。一颗AVL树是其每个结点的左子树和右子树的高度最多相差1。

进行插入操作时,怎么样把插入后的树调整成AVL树。.

将影响平衡因子的结点为a
四种情况
1.对a的左儿子的左子树插入
2.对a的右儿子的右子树插入
3.对a的左儿子的右子树插入
4.对a的右儿子的左子树插入

1和2两种情况都是单选择,将a结点向下移,它的儿子向上移

3和4是双旋转, 左右旋转的话,就是,左子树进行youyou旋转,然后总体在zuozuo旋转。

private int height(AvlNode t){return t==null ? 0 : t.height;}
//avl树的高度//插入
private AvlNode insert(int x, AvlNode t){if(t==null)rerurn  new AvlNode(x,null,null);int a=x.compareTo(t.element);//比较元素大小if(a>0)t.right=insert(x,t.right);else if(a<0)t.left=insert(x,t.left);esle    ;//啥也不用做return balance(t);}private static final int A = 1;//当做一个常量 拿来比较高度private AvlNode balance(AvlNode t){if(t==null)return t;if(height(t.left)-height(t.right)>A){  //插入元素到左孩子还是右孩子if( height(t.left.left)>=height(t.left.right) )  //单选择,左左t=zuozuo(t);elset=zuoyou(t);}else{if( height(t.right.right)>=height(t.right.left) )t=youyou(t);elset=youzuo(t);}t.height=Math.max( height(t.left) , height(t.right) ) +1;return t;}private AvlNode zuozuo( AvlNode t){AvlNode t1=t.left;t.left=t1.right;t1.right=t;t.height=Math.max( height(t.left) , height(t.right)) + 1;t1.height=Math.max( height(t1.left), t.height ) + 1;return t1;}//youyou和这个差不多private AvlNode youyou(AvlNode t){AvlNode t1 = t.right;t.right = t1.left;t1.left = t;t.height=Math.max( height(t.left) , height(t.right)) + 1;t1.height=Math.max( height(t1.left), t.height ) + 1;return t1;}private AvlNode zuoyou(AvlNode t)
{t.left=youyou(t.left);t=zuozuo(t);return t;
}AVL树的删除
private AvlNode remove(int x, AvlNode t)
{if(t==null)return t;int a=x.compareTo(t.element);if(a<0)t.left=remove(x, t.left);else if(a>0)t.right=remove(x, t.right);else{if(t.left!=null && t.right!=null)t.element=findMin(t.right).element;t.right=remove(t.element, t.right);elset=(t.left!=null) ? t.left : t.right;// 它return到了新的t了,因为递归实现,之前原来的父亲指到了这个t.return balance(t);}

AVL树的操作及调整成AVL树相关推荐

  1. 奇小葩讲设备树(5/5)-- Linux设备树详解(五)设备树的使用

    对于任何的知识来说,了解了理论的知识,知道了设备树怎么解析用以代替传统的范式之后,我们需要知道怎么使用设备树.对于使用我们分两部分,一部分是它有哪些接口,能做些什么,至于怎么编写dts文件本章不讨论. ...

  2. 阿里一面,给了几条SQL,问需要执行几次树搜索操作?

    前言 有位朋友去阿里面试,他说面试官给了几条查询SQL,问:需要执行几次树搜索操作?我朋友当时是有点懵的,后来冷静思考,才发现就是考索引的几个基础知识点~~ 本文我们分九个索引知识点,一起来探讨一下. ...

  3. C# OLE DB 的连接方式下 对 sql 参数的操作 需要改成 ? 号

    C# OLE DB 的连接方式下 对 sql 参数的操作 需要改成 ? 号

  4. 备战春招:阿里一面,给了几条SQL,问需要执行几次树搜索操作?

    作者 | 捡田螺的小男孩 来源 | 捡田螺的小男孩 有位朋友去阿里面试,他说面试官给了几条查询SQL,问:需要执行几次树搜索操作?我朋友当时是有点懵的,后来冷静思考,才发现就是考索引的几个基础知识点~ ...

  5. JEECG 树列表操作总刷新列表,需要重新展开问题 【官方补丁,适用所有版本】

    痛苦 - JEECG 树列表操作后,总是刷新整个列表,需要重新展开,这样操作太繁琐. 针对此问题,我们出了此升级方案(适用所有版本) JEECG 3.7.8之前版本,系统管理中的菜单管理.组织结构管理 ...

  6. 数据结构之树的操作大全

    目录 1.树的类型定义 2.创建二叉树 3.三种遍历方式 ①.先序遍历 ②.中序遍历 ③.后序遍历 ④.层次遍历 4.二叉树的复制 5.计算树的深度 6.统计结点个数 ①.统计结点总数 ②.统计叶子节 ...

  7. 怎么将照片尺寸调整成两寸?照片调整尺寸方法分享

    怎么把照片的尺寸调整成两寸呢?大家在使用证件照的时候,很多情况下都因为照片的尺寸不对而无法使用,有的照片要求必须要我们提供两寸照片,如果我们的照片尺寸是一寸或者其它尺寸,该怎么调整呢?很多小伙伴会说自 ...

  8. 手机怎么把照片调整成二寸?教你一招轻松修改尺寸

    怎么使用手机把照片的尺寸修改成二寸呢?随着科技的发展,现在的生活已经越来越便捷.我们不仅可以随时随地通过手机拍照,还可以通过手机应用程序进行照片处理.在日常生活中,我们经常需要提交一些证件,如身份证. ...

  9. 【Ominigraffle】纸张版面调整成A4大小

    一拿到软件画了个图,然后因为不知道还要考虑大小 导致画的图放在word 里出来各种问题 后来就知道每次画图前先把纸张版面调整成A4的大小 步骤一 [文件]–[页面设置]–[纸张大小]选择"A ...

最新文章

  1. STM32F103的PC13、PB3和PB4定义为普通IO口使用
  2. Tensorflow:TensorFlow基础(一)
  3. 脑电波连接计算机游戏,脑电波也能“玩游戏”?这个“挑战杯”全国一等奖告诉你这都不是事儿...
  4. Kotlin解析JSON数据
  5. 阿里矢量图标如何引用详解
  6. cypress自动化--运行测试用例报告输出
  7. 如何在OpenStack-Ansible上集成Tungsten Fabric
  8. 关于深度图/视差图转为伪彩色的方法
  9. VirtualBox下ubuntu和本机win7共享文件夹
  10. [Erlang危机]Erlang In Danger 序言(必读)
  11. 使用potplayer 录制视频
  12. 小米的网络位置服务器,家庭网络小米 Mesh 组网指南|ShellClash 抛弃软路由全家开心 Netflix...
  13. 生鲜订单管理系统能给目前的生鲜水果超市带来哪些好处?
  14. java计算身体质量指数
  15. ChatGPT惨遭围剿?多国封杀、近万人联名抵制……
  16. 只需一行Python代码即可玩20几款小游戏
  17. 2000-2020逐年500m植被净初生产力NPP数据
  18. java 二叉堆_二叉堆的介绍和Java实现
  19. 2022年度总结,以及2023的全新展望
  20. 手机、数码相机数据丢失恢复方法汇总

热门文章

  1. 基于 HTML5 WebGL 的高炉炉体三维热力图监控,展示“智慧工厂”十八般武艺
  2. 截至2022年12月共计451个信息安全国家标准汇总
  3. 【基于stm32 FreeRtos的智能台灯控制】
  4. 现有边缘检测技术和 方法
  5. 什么是 Pandas?
  6. Windows7重装系统后文件夹权限的混乱
  7. (一)计算机网络的一些概念
  8. ThinkPad开机停留在boot menu界面、进不了系统的解决方法
  9. Kubernetes kata-container 介绍
  10. 镜头焦距与视野的计算