AVL,B,B+,红黑
文章目录
- 为什么要有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+,红黑相关推荐
- 二叉排序树、AVL树、红黑树、B树、B+树、Hash树、
二叉排序树 1.基本应用 二叉排序树也称为也叫二叉查找树,二叉搜索树, BST. 满足二叉查找树的一般性质,是指一棵空树具有如下性质: 对于二叉树中的任何一个非叶子节点,要求左子节点比当前节点值小,右 ...
- java 二叉树特点_java学习笔记-二叉树、平衡二叉树(AVL)、红黑二叉树(十)
各种树 标签:数据结构范畴 二叉树的定义: 二叉树是树形结构的一个重要类型. 许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为 ...
- B树、B+树、AVL树、红黑树
from: http://blog.csdn.net/chlele0105/article/details/8473846 binary search tree,中文翻译为二叉搜索树.二叉查找树或者二 ...
- B树,B+树,红黑树应用场景AVL树,红黑树,B树,B+树,Trie树
B B+运用在file system database这类持续存储结构,同样能保持lon(n)的插入与查询,也需要额外的平衡调节.像mysql的数据库定义是可以指定B+ 索引还是hash索引. C++ ...
- 浅谈二叉查找树、AVL树、红黑树、B树、B+树的原理及应用
一.二叉查找树 1.简介 二叉查找树也称为有序二叉查找树,满足二叉查找树的一般性质,是指一棵空树具有如下性质: 任意节点左子树不为空,则左子树的值均小于根节点的值. 任意节点右子树不为空,则右子树的值 ...
- 初探_红黑(Red-black)树
红黑树 红黑(Red-black)树 是一种自平衡二叉查找树,1972年由Rudolf Bayer发明,它与AVL树类似,都在插入和删除操作时能通过旋转操作保持二叉查找树的平衡,以便能获得高效的查 ...
- 图解红黑树及Java进行红黑二叉树遍历的方法
红黑树 红黑树是一种数据结构与算法课堂上常常提到但又不会细讲的树,也是技术面试中经常被问到的树,然而无论是书上还是网上的资料,通常都比较刻板难以理解,能不能一种比较直观的方式来理解红黑树呢?本文将以图 ...
- 讲透学烂二叉树(五):分支平衡—AVL树与红黑树伸展树自平衡
简叙二叉树 二叉树的最大优点的就是查找效率高,在二叉排序树中查找一个结点的平均时间复杂度是O(log₂N): 在<讲透学烂二叉树(二):树与二叉/搜索/平衡等树的概念与特征>提到 二叉排序 ...
- 总结下各种常见树形结构的定义及特点(二叉树、AVL树、红黑树、Trie树、B树、B+树)
文章目录 前言 一棵普通的树 相关术语 二叉树 二叉树性质 二叉树特例 二叉查找树 AVL树 特点及应用 红黑树 特点 应用 Trie树 特点及应用 B树 定义及特点 应用 B+树 B+树的优势及应用 ...
最新文章
- matplotlib绘制带比例(percentile)的堆叠(stacked)条形图(bar plot)
- 什么是脏读,不可重复读,幻读
- iOS开发 tabBarController选中状态
- 企业计算机管理制度论文,082208计算机信息管理制度毕业论文.doc
- Runtime底层原理--Runtime简介、函数注释
- 内存迟迟下不去,可能你就差一个GC.Collect
- ar - 创建静态库.a文件
- oracle删除死锁进程
- python免费课程400节-北京市python儿童学编程
- Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/dom4j/io/SAXReader
- c#项目遇到的问题及解决(1)
- Java面试题中高级,java简历技术栈怎么写
- 矩阵转置与矩阵相乘数学理解及Java实现
- 快速排序的两种写法:左右填坑法与前后交换法
- ACM图论之存图方式
- app打包上传遇到的问题
- 计算雅思成绩C语言,雅思成绩计算器分析
- win7 改装linux系统教程,linux系统改装win7
- 八道简单入门编程题详解+拓展(水花仙,二进制序列……)
- 2022最新Java后端面试题(带答案),重点都给画出来了!你不看?
热门文章
- 提高你开发效率的十五个 Visual Studio 使用技巧
- micropython开发环境_micropython开发者指南
- 人民日报智慧媒体研究院与第四范式合资成立智媒新创 赋能智慧媒体创新
- go语言基础到提高(12)-函数类型与函数变量
- 趣学python3(45)--调用C库-加解密
- 【深度学习】深度学习模型中的信任危机及校正方法
- 【机器学习】图解机器学习中的 12 种交叉验证技术
- 【Python基础】pandas中apply与map的异同
- 超级实用!用Python写股票分析工具
- 高额奖金+实习机会+官方证书 丨微众银行第二届金融科技高校技术大赛正式启动...