平衡二叉树是基于二叉排序树(或者也叫二叉搜索树)实现的一种自平衡的二叉树,实现方法有比如:AVL树、红黑树等等

二叉搜索树定义(维基百科):

二叉查找树(英语:Binary Search Tree),也称二叉搜索树、有序二叉树(英语:ordered binary tree),排序二叉树(英语:sorted binary tree),是指一棵空树或者具有下列性质的二叉树:

1.若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;
2.若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;
3.任意节点的左、右子树也分别为二叉查找树;
4.没有键值相等的节点。

二叉查找树相比于其他数据结构的优势在于查找、插入的时间复杂度较低。为O(log n)

平衡二叉树定义(维基百科):

平衡二叉搜索树(Balanced Binary Tree)是一种结构平衡的二叉搜索树,即叶节点深度差不超过1,它能在O(log n)内完成插入、查找和删除操作,最早被发明的平衡二叉搜索树为AVL树。

二叉查找树插入的时候很快,但是它可能会退化为线性链表,所以查询的时候有可能时间复杂度为O(n)

如图:

但是平衡二叉树插入的时候会自动平衡让它任何节点的左右子节点的高度差不超过1,主要是通过树的旋转来解决。

以AVL树来做一个说明,其中数的旋转有两种:一种是左旋,一种是右旋。
有的时候通过一次旋转就能维持平衡,而有的时候需要两次。主要有四种情况,左左、左右、右左,右右,其中左左和右右是只需要一次旋转,而左右和右左需要两次旋转,具体如下:

1-1左左模式和1-4右右模式只需要旋转一次,其中旋转的方式是一样的,而旋转方向不同而已,下面就拿一个左左的方式:

根节点的左边的深度为减去右边的深度差值为2,说明并不满足平衡二叉树,所以需要进行旋转,根据分析是左边深度大于右边,并且超出的节点2的父节点于祖父节点的左边,所以是左左模式,及需要进行右旋,右旋的时候将节点3作为根节点,节点5像右边作为节点3的右子节点,并且将节点4断开和节点3的连接然后再作为节点5的左子节点,旋转完成(其中右右模式同理,左旋就行了,旋转是一样的只是方向不一样而已)。

1-2左右和1-3右左都需要旋转两次,方向不一样而已操作一样,就拿1-2左右来说,如下图所示:

第一次旋转:将二叉树的1、2、3、4节点抽出来进行左旋,得到后面的树然后再结合5、6节点变成最后一个二叉树,第一次旋转得到的二叉树是一个左左模式。

然后根据左左模式进行右旋,即可得到平衡二叉树:

第二次旋转:然后将这个第一次旋转的左左模式二叉树安装图1-1进行右旋即可,最终得到一个AVL树。

平衡二叉树之AVL树的旋转相关推荐

  1. AVL树平衡旋转详解

    AVL树平衡旋转详解 概述 AVL树又叫做平衡二叉树.前言部分我也有说到,AVL树的前提是二叉排序树(BST或叫做二叉查找树).由于在生成BST树的过程中可能会出现线型树结构,比如插入的顺序是:1, ...

  2. 20分钟搞定平衡二叉树(AVL树)【超详细】

    文章目录 一.树结构入门 1.什么是树? 2.树结构常用术语 3.二叉搜索树 二.平衡二叉树(AVL树) 1. AVL树简介 2. 失衡二叉排序树的分析与调整 3. 为什么有了平衡树还需要红黑树? 一 ...

  3. avl二叉树 java_平衡二叉树之AVL树(Adelson-Velsky and Landis Tree)简介及Java实现

    平衡二叉树之AVL树(Adelson-Velsky and Landis Tree)简介及Java实现 标签:#二叉树##数据结构##自平衡二叉树# 时间:2018/10/27 09:30:01 作者 ...

  4. 【大话数据结构C语言】57 平衡二叉树(AVL树)

    欢迎关注我的公众号是[CodeAllen],关注回复[1024]获取精品学习资源 程序员技术交流①群:736386324 ,程序员技术交流②群:371394777 平衡二叉排序树 平衡二叉树是一种二叉 ...

  5. 数据结构之查找(六)——平衡二叉树(AVL树)

    平衡二叉树(AVL树) 平衡二叉树(Self-Balancing Binary Search Tree 或 Height-Balanced Binary Search Tree),是一种二叉排序树,其 ...

  6. c++《AVL树的概念》《AVL树的插入》《AVL树的旋转》《AVL树的验证》《AVL树的删除》《AVL树的性能》

    4.1 AVL树 4.1.1 AVL树的概念 二叉搜索树虽可以缩短查找的效率,**但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当 于在顺序表中搜索元素,效率低下.**因此,两位俄罗斯的 ...

  7. 【数据结构笔记12】平衡二叉树,AVL树,RR旋转/LL旋转/LR旋转/RL旋转,AVL树插入的代码实现

    本次笔记内容: 4.2.1 什么是平衡二叉树 4.2.2 平衡二叉树的调整 文章目录 什么是平衡二叉树 评价查找长度ASL 平衡因子(Balance Factor,BF) 平衡二叉树(Balanced ...

  8. 实现平衡二叉树(AVL树)的旋转

    给你一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST), 并分析问题所在. 左边 BST 存在的问题分析:               1) 左子树全部为空,从形式上看,更像一个单链 ...

  9. 平衡二叉树平衡因子怎么计算_平衡二叉树(AVL Tree)旋转机制分析

    平衡二叉树(AVL Tree) 概述 AVL树是以二分搜索树(BST)为底层数据结构而实现的,其特性是需要维护AVL的|平衡因子| <= 1 平衡因子 对于一个父节点的左右子树高度差的绝对值需要 ...

最新文章

  1. 图像转置的MATLAB和OpenCV源码
  2. 【组合数学】生成函数 ( 正整数拆分 | 无序 | 有序 | 允许重复 | 不允许重复 | 无序不重复拆分 | 无序重复拆分 )
  3. IIS6下配置fastcgi的php的教程
  4. 4个最难的 Elastic Search 面试题
  5. android 模拟点击 不发出声音,【Android】代码实现模拟屏幕点击和键盘按键事件...
  6. java数据库设计工具_Java课程设计---创建数据库工具类
  7. leetcode103. 二叉树的锯齿形层次遍历(bfs)
  8. react学习(17)----ant design格式化日期
  9. mysql bug_MySQL 记一次 Bug发现过程
  10. php 首页加背景图片,如何在页首添加一张背景图片
  11. 小度智能音箱维修点_小度智能音箱无法唤醒怎么办
  12. ipconfig /flushdns 清除系统DNS缓存
  13. seo图片的alt属性介绍及写法?
  14. 再次理解javascript中的事件
  15. JavaScript学习01
  16. Netty 实现长连接服务的难点和优化点
  17. java map格式化_字符串模板格式化输出map 值
  18. svn安装以及初步使用
  19. 计算机专业论文答辩ppt,计算机毕论文答辩PPT(完整版).ppt
  20. 达威尔液晶电子手写板儿童涂鸦画板写字板,培养小孩创造力和想象力的好工具!

热门文章

  1. c# 火狐浏览器怎么嵌入窗体中_正在学c# winform,问各位前辈一下 能调用火狐或者其他的浏览器吗?...
  2. Eclipse+PHPEclipse+ Subversion+ TortoiseSVN
  3. Matplotlib基本语法
  4. 饥荒mod制作学习(2)
  5. sofa源码学习----启动获取ServerConfig流程
  6. TI DaVinci(达芬奇)入门
  7. 离散数学---期末复习知识点
  8. centOS7安装搜狗拼音输入法
  9. Android Web应用高级编程
  10. Flutter笔记-There are multiple heroes that share the same tag within a subtree