AVL树的操作及调整成AVL树
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树相关推荐
- 奇小葩讲设备树(5/5)-- Linux设备树详解(五)设备树的使用
对于任何的知识来说,了解了理论的知识,知道了设备树怎么解析用以代替传统的范式之后,我们需要知道怎么使用设备树.对于使用我们分两部分,一部分是它有哪些接口,能做些什么,至于怎么编写dts文件本章不讨论. ...
- 阿里一面,给了几条SQL,问需要执行几次树搜索操作?
前言 有位朋友去阿里面试,他说面试官给了几条查询SQL,问:需要执行几次树搜索操作?我朋友当时是有点懵的,后来冷静思考,才发现就是考索引的几个基础知识点~~ 本文我们分九个索引知识点,一起来探讨一下. ...
- C# OLE DB 的连接方式下 对 sql 参数的操作 需要改成 ? 号
C# OLE DB 的连接方式下 对 sql 参数的操作 需要改成 ? 号
- 备战春招:阿里一面,给了几条SQL,问需要执行几次树搜索操作?
作者 | 捡田螺的小男孩 来源 | 捡田螺的小男孩 有位朋友去阿里面试,他说面试官给了几条查询SQL,问:需要执行几次树搜索操作?我朋友当时是有点懵的,后来冷静思考,才发现就是考索引的几个基础知识点~ ...
- JEECG 树列表操作总刷新列表,需要重新展开问题 【官方补丁,适用所有版本】
痛苦 - JEECG 树列表操作后,总是刷新整个列表,需要重新展开,这样操作太繁琐. 针对此问题,我们出了此升级方案(适用所有版本) JEECG 3.7.8之前版本,系统管理中的菜单管理.组织结构管理 ...
- 数据结构之树的操作大全
目录 1.树的类型定义 2.创建二叉树 3.三种遍历方式 ①.先序遍历 ②.中序遍历 ③.后序遍历 ④.层次遍历 4.二叉树的复制 5.计算树的深度 6.统计结点个数 ①.统计结点总数 ②.统计叶子节 ...
- 怎么将照片尺寸调整成两寸?照片调整尺寸方法分享
怎么把照片的尺寸调整成两寸呢?大家在使用证件照的时候,很多情况下都因为照片的尺寸不对而无法使用,有的照片要求必须要我们提供两寸照片,如果我们的照片尺寸是一寸或者其它尺寸,该怎么调整呢?很多小伙伴会说自 ...
- 手机怎么把照片调整成二寸?教你一招轻松修改尺寸
怎么使用手机把照片的尺寸修改成二寸呢?随着科技的发展,现在的生活已经越来越便捷.我们不仅可以随时随地通过手机拍照,还可以通过手机应用程序进行照片处理.在日常生活中,我们经常需要提交一些证件,如身份证. ...
- 【Ominigraffle】纸张版面调整成A4大小
一拿到软件画了个图,然后因为不知道还要考虑大小 导致画的图放在word 里出来各种问题 后来就知道每次画图前先把纸张版面调整成A4的大小 步骤一 [文件]–[页面设置]–[纸张大小]选择"A ...
最新文章
- STM32F103的PC13、PB3和PB4定义为普通IO口使用
- Tensorflow:TensorFlow基础(一)
- 脑电波连接计算机游戏,脑电波也能“玩游戏”?这个“挑战杯”全国一等奖告诉你这都不是事儿...
- Kotlin解析JSON数据
- 阿里矢量图标如何引用详解
- cypress自动化--运行测试用例报告输出
- 如何在OpenStack-Ansible上集成Tungsten Fabric
- 关于深度图/视差图转为伪彩色的方法
- VirtualBox下ubuntu和本机win7共享文件夹
- [Erlang危机]Erlang In Danger 序言(必读)
- 使用potplayer 录制视频
- 小米的网络位置服务器,家庭网络小米 Mesh 组网指南|ShellClash 抛弃软路由全家开心 Netflix...
- 生鲜订单管理系统能给目前的生鲜水果超市带来哪些好处?
- java计算身体质量指数
- ChatGPT惨遭围剿?多国封杀、近万人联名抵制……
- 只需一行Python代码即可玩20几款小游戏
- 2000-2020逐年500m植被净初生产力NPP数据
- java 二叉堆_二叉堆的介绍和Java实现
- 2022年度总结,以及2023的全新展望
- 手机、数码相机数据丢失恢复方法汇总