文章目录

  • 为什么要有AVL树
  • AVL的旋转有哪几种?
  • 为什么有了平衡树还要有红黑树
  • 红黑树的特点
  • B 树
  • B+ 树
    • 1:treenode
    • 2:插入
    • 3:扩容
  • B+ 树索引和 B树索引

为什么要有AVL树

  • 当出现极端的情况,树的节点可能会近似与链表的形式,使得时间复杂度近似与 O(n)

AVL的旋转有哪几种?

  • 左左型 :节点都偏向左边

    • 顺时针旋转两个节点,使得自己的左子节点成为根节点,而自己成为右子节点
  • 右右型:节点都偏向右边
    • 逆时针旋转两个节点,使得自己的右子节点成为根节点,而自己成为左子节点
  • 右左型:节点是偏向右边,但是最底下的叶节点偏向左边
    • 将它转化为右右型号
    • 再进行右右型的旋转
  • 左右型:节点是偏向左边,但是最底下的爷节点是偏向右边
    • 将他转化为左左型号
    • 再进行左左型的旋转

为什么有了平衡树还要有红黑树

  • 平衡树解决了在极端的情况下变成链表的情形,使得任意的两个叶子节点的深度小于等于1。
  • 这个要求是在是太严格了,基本上每次新增插入,或者是删除的时候,都会破坏这个要求
  • 使得每次都要进行左旋或者是右旋来调整,进而成为一颗平衡二叉树
  • 如果是在删除,插入场景很多的情况下,AVL树的性能会大大的折扣

红黑树的特点

  • 是一种二叉搜索树,任意的左子节点都比自己小,右子节点都比自己大
  • 根节点是黑色的
  • 每个叶子节点都是黑色的,并且里面不存数据,为空
  • 任意两个相邻的节点不能是红色的,也就是,红节点是被黑节点分割开来
  • 每个节点,从该节点到其可达的叶子节点的所有路劲,都包括相同数量的黑色节点

B 树

  • 每个节点中都存放着信息,所以查询的时候,最快为O(1),最多为O(log n)
  • 他的叶节点没有指针进行相连,不适合与范围查询

B+ 树

  • B+ 树是为了磁盘设计的一种平衡查找树,所以的数据节点都放在同一层的叶节点中,并且各个叶节点有指针连接
  • 有K个字数的节点就含有K 个元素,每个元素不放数据,只放索引,数据统一放在叶节点之中
  • 所有的叶节点包含了全部的数据信息,以及指向数据的指针,并且数据是按照从小到大依次进行排列的。
  • 所有的中间节点都同时存在于子节点中,在子节点是最大,最小元素
  • B+ 树是从下到上查找,而B 树是从下到上查找
  • 单一节点存储更多的元素,使得树变得矮胖了,树下的分支变多了,减少I/O 的次数
  • 所有的查询都要查询到叶子节点,查询性能稳定
  • 所有的叶子节点都是按序连接的,适合与范围查询

1:treenode

  • treenode 是继承了node结构,在node基础上加了几个字段
  • 指向父节点的,指向左子节点,指向右子节点,还有表示颜色的

2:插入

  • 找到一个合适的插入点,就是找到插入节点的父节点,红黑树满足二叉搜索树的特性,需要进行一次的平衡操作
  • 插入会打破平衡
  • 插入一定是红色的节点,碰到父节点是黑色的,树不会失衡

3:扩容

  • treenode保持着一个 next的字段,查询的时候不适用
  • 但是新增或者是删除节点的时候,仍然需要维护这个链表
  • 链表方便split拆分这个红黑树的时候,拆分为高位链和地位链
  • 高位链的数据,最重要存放到新表中去
  • 拆分出来的链表,需要看一下他的长度

B+ 树索引和 B树索引

  • 由于关系型数据库和非关系型数据库数据设计方式的不同,导致关系型数据库常常用到数据的遍历,而非关系型用到表的单一查询
  • 所以在MySQL 数据库中,使用B+ 树作为索引,而在mongodb中,B 树作为索引

AVL,B,B+,红黑相关推荐

  1. 二叉排序树、AVL树、红黑树、B树、B+树、Hash树、

    二叉排序树 1.基本应用 二叉排序树也称为也叫二叉查找树,二叉搜索树, BST. 满足二叉查找树的一般性质,是指一棵空树具有如下性质: 对于二叉树中的任何一个非叶子节点,要求左子节点比当前节点值小,右 ...

  2. java 二叉树特点_java学习笔记-二叉树、平衡二叉树(AVL)、红黑二叉树(十)

    各种树 标签:数据结构范畴 二叉树的定义: 二叉树是树形结构的一个重要类型. 许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为 ...

  3. B树、B+树、AVL树、红黑树

    from: http://blog.csdn.net/chlele0105/article/details/8473846 binary search tree,中文翻译为二叉搜索树.二叉查找树或者二 ...

  4. B树,B+树,红黑树应用场景AVL树,红黑树,B树,B+树,Trie树

    B B+运用在file system database这类持续存储结构,同样能保持lon(n)的插入与查询,也需要额外的平衡调节.像mysql的数据库定义是可以指定B+ 索引还是hash索引. C++ ...

  5. 浅谈二叉查找树、AVL树、红黑树、B树、B+树的原理及应用

    一.二叉查找树 1.简介 二叉查找树也称为有序二叉查找树,满足二叉查找树的一般性质,是指一棵空树具有如下性质: 任意节点左子树不为空,则左子树的值均小于根节点的值. 任意节点右子树不为空,则右子树的值 ...

  6. 初探_红黑(Red-black)树

    红黑树 红黑(Red-black)树 ​ 是一种自平衡二叉查找树,1972年由Rudolf Bayer发明,它与AVL树类似,都在插入和删除操作时能通过旋转操作保持二叉查找树的平衡,以便能获得高效的查 ...

  7. 图解红黑树及Java进行红黑二叉树遍历的方法

    红黑树 红黑树是一种数据结构与算法课堂上常常提到但又不会细讲的树,也是技术面试中经常被问到的树,然而无论是书上还是网上的资料,通常都比较刻板难以理解,能不能一种比较直观的方式来理解红黑树呢?本文将以图 ...

  8. 讲透学烂二叉树(五):分支平衡—AVL树与红黑树伸展树自平衡

    简叙二叉树 二叉树的最大优点的就是查找效率高,在二叉排序树中查找一个结点的平均时间复杂度是O(log₂N): 在<讲透学烂二叉树(二):树与二叉/搜索/平衡等树的概念与特征>提到 二叉排序 ...

  9. 总结下各种常见树形结构的定义及特点(二叉树、AVL树、红黑树、Trie树、B树、B+树)

    文章目录 前言 一棵普通的树 相关术语 二叉树 二叉树性质 二叉树特例 二叉查找树 AVL树 特点及应用 红黑树 特点 应用 Trie树 特点及应用 B树 定义及特点 应用 B+树 B+树的优势及应用 ...

最新文章

  1. matplotlib绘制带比例(percentile)的堆叠(stacked)条形图(bar plot)
  2. 什么是脏读,不可重复读,幻读
  3. iOS开发 tabBarController选中状态
  4. 企业计算机管理制度论文,082208计算机信息管理制度毕业论文.doc
  5. Runtime底层原理--Runtime简介、函数注释
  6. 内存迟迟下不去,可能你就差一个GC.Collect
  7. ar - 创建静态库.a文件
  8. oracle删除死锁进程
  9. python免费课程400节-北京市python儿童学编程
  10. Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/dom4j/io/SAXReader
  11. c#项目遇到的问题及解决(1)
  12. Java面试题中高级,java简历技术栈怎么写
  13. 矩阵转置与矩阵相乘数学理解及Java实现
  14. 快速排序的两种写法:左右填坑法与前后交换法
  15. ACM图论之存图方式
  16. app打包上传遇到的问题
  17. 计算雅思成绩C语言,雅思成绩计算器分析
  18. win7 改装linux系统教程,linux系统改装win7
  19. 八道简单入门编程题详解+拓展(水花仙,二进制序列……)
  20. 2022最新Java后端面试题(带答案),重点都给画出来了!你不看?

热门文章

  1. 提高你开发效率的十五个 Visual Studio 使用技巧
  2. micropython开发环境_micropython开发者指南
  3. 人民日报智慧媒体研究院与第四范式合资成立智媒新创 赋能智慧媒体创新
  4. go语言基础到提高(12)-函数类型与函数变量
  5. 趣学python3(45)--调用C库-加解密
  6. 【深度学习】深度学习模型中的信任危机及校正方法
  7. 【机器学习】图解机器学习中的 12 种交叉验证技术
  8. 【Python基础】pandas中apply与map的异同
  9. 超级实用!用Python写股票分析工具
  10. 高额奖金+实习机会+官方证书 丨微众银行第二届金融科技高校技术大赛正式启动...