代码如下:

package AVLTree;import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;public class AVLTree {private class TreeNode{private int data;TreeNode left;TreeNode right;private int height;public TreeNode(int e){data = e;left = null;right = null;height = 0;}}private TreeNode AVLTreeRoot;public AVLTree(){AVLTreeRoot = null;}public int heightTree(TreeNode root){if (root==null) return 0;int l = heightTree(root.left);int r = heightTree(root.right);return (l>r?l:r)+1;}private TreeNode singleLeftRotation(TreeNode root){TreeNode p = root.left;root.left = p.right;p.right = root;root.height = heightTree(root);p.height = heightTree(p);return p;}private TreeNode singleRightRotation(TreeNode root){TreeNode p = root.right;root.right = p.left;p.left = root;root.height = heightTree(root);p.height = heightTree(p);return p;}private TreeNode doubleLeftRightRotation(TreeNode root){root.left = singleRightRotation(root.left);return singleLeftRotation(root);}private TreeNode doubleRightLeftRotation(TreeNode root){root.right = singleLeftRotation(root.right);return singleRightRotation(root);}public TreeNode insertTree(int e,TreeNode root){if (root==null){root = new TreeNode(e);}else if (e < root.data){root.left = insertTree(e,root.left);if (heightTree(root.left)-heightTree(root.right)==2){if (e < root.left.data){root = singleLeftRotation(root);}else{root = doubleLeftRightRotation(root);}}}else if (e > root.data){root.right = insertTree(e,root.right);if (heightTree(root.left)-heightTree(root.right)==-2){if (e > root.right.data){root = singleRightRotation(root);}else{root = doubleRightLeftRotation(root);}}}root.height = heightTree(root);return root;}public boolean createTree(int n){Scanner sc = new Scanner(System.in);for (int i = 0;i<n;i++){int val = sc.nextInt();AVLTreeRoot = insertTree(val,AVLTreeRoot);}return true;}public void levelOrder(){ArrayList<Integer> arrays = new ArrayList<>();Queue<TreeNode> q = new LinkedList<>();if (AVLTreeRoot==null){System.out.println(arrays);return ;}q.add(AVLTreeRoot);while(!q.isEmpty()){TreeNode t = q.poll();arrays.add(t.data);if (t.left!=null) q.add(t.left);if (t.right!=null) q.add(t.right);}System.out.println(arrays);}}

测试类如下:

package AVLTree;public class TestAVLTree {public static void main(String[] args){AVLTree bt = new AVLTree();bt.createTree(8);bt.levelOrder();}
}

Java实现AVL平衡树相关推荐

  1. AVL平衡树的插入例程

    /* **AVL平衡树插入例程 **2014-5-30 11:44:50 */avlTree insert(elementType X, avlTree T){if(T == NULL){T = ma ...

  2. AVL平衡树c语言实现与测试-建立自己的c数据结构与算法库系列(最新修改)(13)

    重新修改让我非常郁闷,本来已经详细分析,图文并茅,自认为分析得非常晰. 写完保存,居然没有成功,一大堆工作白费了.CSDN这个博客真是让我失望啊,Best4c中画图非常辛苦,可是画完了也白费了. 唉呀 ...

  3. java生成avl文件_AVL文件扩展名 - 什么是.avl以及如何打开? - ReviverSoft

    你在这里因为你有,有一个文件扩展名结尾的​​文件 .avl. 文件与文件扩展名 .avl 只能通过特定的应用程序推出.这有可能是 .avl 文件是数据文件,而不是文件或媒体,这意味着他们并不是在所有观 ...

  4. 构造avl树_图解 AVL 自平衡二叉查找树及 java 实现

    思维导图 AVL树 AVL树是根据它的发明者G.M. Adelson-Velsky和E.M. Landis命名的. 它是最先发明的自平衡二叉查找树(Self-balancing binary sear ...

  5. 二叉平衡树(AVL树)从演变、平衡、旋转加练习题逐步分析,看不会过来打我

    想要了解AVL树,就得了解它是怎么演化来的,它并不是凭空创造的一个新数据结构,而是发现其他数据结构的不完美而演变过来的. 二叉查找树 我想二叉排序树结构的起源一定是来源于生活,二叉树只有一个根节点,每 ...

  6. 【从蛋壳到满天飞】JS 数据结构解析和算法实现-AVL树(一)

    前言 [从蛋壳到满天飞]JS 数据结构解析和算法实现,全部文章大概的内容如下: Arrays(数组).Stacks(栈).Queues(队列).LinkedList(链表).Recursion(递归思 ...

  7. 二叉树--二叉平衡树

    二叉平衡树是二叉树中最为最要的概念之一,也是在语言库或者项目中应用比较广泛的一种特殊的树形结构. 二叉平衡树 AVL树是高度平衡的而二叉树.它的特点是:AVL树中任何节点的两个子树的高度最大差别为1. ...

  8. 【详细总结】你所需要掌握的Java后端知识点

    目录 Spring Spring框架的七大模块 Bean定义5种作用域 spring ioc初始化流程? BeanDefinition加载流程? DI依赖注入流程? (实例化,处理Bean之间的依赖关 ...

  9. 这篇java面试是真的真的够全的,强烈推荐给大家

    来源:https://blog.csdn.net/qq_35190492/article/details/105992063 前言 前段时间敖丙不是在复习嘛,很多小伙伴也想要我的复习路线,以及我自己笔 ...

最新文章

  1. 报名 | AI Time :论道AI安全与伦理
  2. 德黑兰大学推可踢球机器人,中国队快买!
  3. requests不加代理
  4. react学习(51)--避免死循环
  5. mysql5.5及以下安装全过程(5.7以上不适合)
  6. livevent的几个问题
  7. 数据库和python的结合_mysql数据库备份和python结合
  8. 管理感悟:提倡撞钟的工作态度
  9. eclipse安装教程2020版(解决官网下载的安装包打开无响应的问题)
  10. .net 开源混淆器 ConfuserEx
  11. kubeedge解决边端keadm join的时候卡住的问题
  12. 海康威视、python环境下onvif安装,多通道摄像头获取rtsp视频流
  13. java工单系统源码_基于jsp的工单管理系统-JavaEE实现工单管理系统 - java项目源码...
  14. Buct oj 1019
  15. 电子警察是属于计算机应用中的,计算机应用基础测试题.doc
  16. COLA异步任务重复执行?
  17. 洛谷 P1796 汤姆斯的天堂梦_NOI导刊2010提高(05)
  18. 单片机实验三(1):中断处理,定时器
  19. 猿如意---初学者的一盏明灯---程序员的宝藏app
  20. js点击事件在苹果ios端失效的解决方法

热门文章

  1. [转]EL函数、自定义EL函数、自定义标签
  2. 【QGIS入门实战精品教程】4.1:QGIS栅格数据地理配准完整操作流程
  3. Excel只能输入不能修改
  4. Android之判断时间戳是不是今天
  5. Windows之Fiddler抓HTTP和HTTPS请求
  6. Android之解决Android8.0手机(Notification)收不到自定义消息通知以及其它手机得到数据不同步
  7. Android之JNI的使用
  8. Android之ActionBar常用设计和使用总结
  9. 我让代码生了个孩子继承了他爸爸谁知他爸爸继承了他爷爷(16)
  10. mlp 参数调优_积神经网络(CNN)的参数优化方法