最近在复习数据结构,看到BST的时候遇到了问题,就是当删除或增加树中节点时,要求保证树的高度平衡行,也就是使BST成为AVL。

后来看了很多资料,说LL、RR、LR、RL啥的,没看懂。之后经过和同学研究发现了一个特性,就是offending node与其回溯路径上的最近的两个点有大小关系。

如上图,一个空BST树,插入16到树中,由于是空树,那么16就作为根节点。之后再输入3。3比16小,放在16的左边作为左子节点,再输入7,7比16小,走左子树一边,然后7再和3相比较,7比3大,走3的右子树。但是如上图所示,这不是一棵AVL树,因为16的左子树高度为2,右子树高度为0,左右高度差的绝对值为2,超过了AVL的条件:左右高度绝对差<2。那么就需要“旋转子树”以保证其AVL特性。

看了很多书,都说什么左旋转啊右旋转啊,像上图这种情况还比较复杂,需要先左旋转后右旋转。

其实,经过这些天的研究发现,以上图为例,当节点7进入树之后,打破了平衡,那么就从节点7开始回溯找到offending node,也就是节点16。然后选择offending node与回溯路径上的距离节点16的最近的两个node,也就是节点3和7。这三个点选取之后,对三个点进行大小比较,找出最小、最大和中间节点,比如16、3、7三个节点的按大小排序后的顺序是3、7、16。然后中间的节点(节点7)作为新树的根,其左节点是最小节点,右节点是最大节点,然后将新树接回原来的树上。

转载于:https://blog.51cto.com/rickqin/1349348

有关BST搜索树转换为AVL高度平衡树的旋转问题相关推荐

  1. 数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)

    原文:http://blog.csdn.net/sup_heaven/article/details/39313731 数据结构中常见的树(BST二叉搜索树.AVL平衡二叉树.RBT红黑树.B-树.B ...

  2. [二叉树遍历|BST]leetcode 538 把二叉搜索树转换为累加树

    [二叉树遍历|BST]leetcode 538 把二叉搜索树转换为累加树 1.题目 题目链接 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree) ...

  3. 种树:二叉树、二叉搜索树、AVL树、红黑树、哈夫曼树、B树、树与森林

    虽然今天不是植树节,但是我今天想种树. 文章目录 树,什么是树? 二叉树 定义 二叉树的创建 二叉树的前中后序遍历 前序遍历: 中序遍历 后序遍历 已知前序.中序遍历结果,还原二叉树 已知后序.中序遍 ...

  4. AVL树平衡旋转详解

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

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

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

  6. 平衡二叉树之AVL树的旋转

    平衡二叉树是基于二叉排序树(或者也叫二叉搜索树)实现的一种自平衡的二叉树,实现方法有比如:AVL树.红黑树等等 二叉搜索树定义(维基百科): 二叉查找树(英语:Binary Search Tree), ...

  7. 【数据结构与算法】之深入解析“把二叉搜索树转换为累加树”和“从二叉搜索树到更大和树”的求解思路与算法示例

    一.题目要求 ① 把二叉搜索树转换为累加树 给出二叉搜索树的根节点,该树的节点值各不相同,请将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 no ...

  8. [二叉树]二叉搜索树转换为双向链表(剑指Offer26)

    [试题描述] 将二叉搜索树转换为双向链表 对于二叉搜索树,可以将其转换为双向链表,其中,节点的左子树指针在链表中指向前一个节点,右子树指针在链表中指向后一个节点. 思路一: 采用递归思想,对于二叉搜索 ...

  9. 【IT笔试面试题整理】二叉搜索树转换为双向链表

    [试题描述] 将二叉搜索树转换为双向链表 对于二叉搜索树,可以将其转换为双向链表,其中,节点的左子树指针在链表中指向前一个节点,右子树指针在链表中指向后一个节点. 思路一: 采用递归思想,对于二叉搜索 ...

最新文章

  1. graylog2安装
  2. 4月CISSP中文机考备考经验
  3. const与#define相比,区别和优点超详解总结
  4. 巨人的魔法——腾讯打造会思考的数据中心
  5. java 10进制转2进制递归算法_十进制转二进制
  6. 【正十七边形可尺规作图原理】
  7. ONNX系列二 --- 使用ONNX使Keras模型可移植
  8. python 的基础 学习 第六天 基础数据类型的操作方法 字典
  9. android之sqlite增、删、改,查
  10. Velocity笔记(上)
  11. input标签上传文件(一篇搞定)
  12. 判断手机号所属运营商--课后程序(Python程序开发案例教程-黑马程序员编著-第11章-课后作业)
  13. 照片变漫画的方法有哪些?推荐两个方法给你
  14. day9:JAVA中while的用法
  15. 造轮子--MLP与EBP的实现
  16. 数据结构(python语言描述)课后题答案_数据结构课后习题及答案
  17. Docker容器启动参数大全与详细说明
  18. 乡村少年宫计算机小组活动教案,少年宫计算机组教案定稿版.docx
  19. Vue使用Echarts实现数据可视化
  20. 用python制作微信好友个性签名的词云图

热门文章

  1. 深入浅出 5种IO模型。
  2. 【linux】tcpdump抓包
  3. 18:等差数列末项计算
  4. jQuery选择器之可见性过滤选择器Demo
  5. 推荐一款非常好用的java反编译工具(转)
  6. 节点操作-创建并添加删除节点替换克隆节点
  7. Cooperative Content Distribution and Traffic Engineering
  8. 为什么拼多多没有购物车?
  9. 数据产品必备技术知识:机器学习及常见算法,看这一篇就够了
  10. 一名优秀的初创企业员工怎么做好工作计划