二叉搜索树

每个节点只存储一个关键字,
每个节点最多有两个子节点,
左子节点存储的关键字小于本节点存储的关键字
右子节点存储的关键字大于本节点存储的关键字
搜索时,从根节点开始搜索,小于走左结点,大于走右结点,等于则命中;

平衡二叉树

在原二叉搜索树的基础上加上平衡算法,即为平衡二叉树

平衡算法

平衡算法是一种在二叉搜索树中插入节点和删除结点时对树调整的策略

B树(即B-树)

它是多路搜索树(二叉树每个节点最多只有两个子节点,多路搜索树没有这个限制)
非叶子节点,既放了n个关键字,又放了(n+1)个指向子节点的指针
根节点的子节点数为[2, M],其他节点的子节点数为[M/2, M]
所有关键字在整颗树中出现,且只出现一次,非叶子结点可以命中
所有叶子结点位于同一层

B+树

是对B树的优化
为叶子结点增加链表指针,所有关键字都在叶子结点中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中;
非叶子结点相当于是叶子结点的索引,叶子结点相当于是存储(关键字)数据的数据层;
由于数据都从非叶子节点转移到了叶子节点,所以每个非叶子节点能容纳的索引指针就会更多,从而减少了树的层级

B * 树

是对B+树的优化
在B+树的非根和非叶子结点再增加指向兄弟的指针;将结点的最低利用率从1/2提高到2/3;

1、B+树的分裂

当一个结点满时,分配一个新的结点,并将原结点中1/2的数据
复制到新结点,最后在父结点中增加新结点的指针;B+树的分裂只影响原结点和父
结点,而不会影响兄弟结点,所以它不需要指向兄弟的指针;

2、B * 树的分裂

当一个结点满时,如果它的下一个兄弟结点未满,那么将一部分
数据移到兄弟结点中,再在原结点插入关键字,最后修改父结点中兄弟结点的关键字;
如果兄弟也满了,则在原结点与兄弟结点之
间增加新结点,并各复制1/3的数据到新结点,最后在父结点增加新结点的指针

AVL树

带有平强衡条件的二叉查找树,所有节点的左右子树树高不超过1,
和红黑树相比,AVL树是严格的平衡二叉树,平衡条件必须满足
不管我们是执行插入还是删除操作,只要不满足上面的条件,就要通过旋转来保持平衡,
而它的英文旋转非常耗时的,由此我们可以知道AVL树适合用于插入与删除次数比较少,但查找多的情况

红黑树

带有平弱平衡条件的二叉查找树,在每个节点都带有颜色,可以是红或黑(非红即黑)。
红黑树确保没有一条路径会比其它路径长出两倍,因此,红黑树是一种弱平衡二叉树
相对于要求严格的AVL来说,它的旋转次数少,所以对于搜索,插入,删除操作较多的情况下,我们就用红黑树。

二叉树、B树、B+树、B*树、VAL树、红黑树的更多相关文章

  1. 为什么Mysql用B+树做索引而不用B-树或红黑树

    B+树做索引而不用B-树 那么Mysql如何衡量查询效率呢?– 磁盘IO次数. 一般来说索引非常大,尤其是关系性数据库这种数据量大的索引能达到亿级别,所以为了减少内存的占用,索引也会被存储在磁盘上. ...

  2. 二叉树,B树,B+树,红黑树 简介

    什么是二叉树? 在计算机科学中,二叉树是每个节点最多有两个子树的树结构.通常子树被称作“左子树”和“右子树”,左子树和右子树同时也是二叉树.二叉树的子树有左右之分,并且次序不能任意颠倒.二叉树是递归定 ...

  3. 二叉树、红黑树、伸展树、B树、B+树

    好多树啊,程序猿砍树记,吼吼. 许多程序要解决的关键问题是:快速定位特定排序项的能力. 第一类:散列 第二类:字符串查找 第三类:树算法 树算法可以在辅助存储器中存储大量的数据. 二叉树.红黑树和伸展 ...

  4. 大名鼎鼎的红黑树,你get了么?2-3树 绝对平衡 右旋转 左旋转 颜色反转

    前言 11.1新的一月加油!这个购物狂欢的季节,一看,已囊中羞涩!赶紧来恶补一下红黑树和2-3树吧!红黑树真的算是大名鼎鼎了吧?即使你不了解它,但一定听过吧?下面跟随我来揭开神秘的面纱吧! 一.2-3 ...

  5. 红黑树与AVL树

    概述:本文从排序二叉树作为引子,讲解了红黑树,最后把红黑树和AVL树做了一个比较全面的对比. 1 排序二叉树 排序二叉树是一种特殊结构的二叉树,可以非常方便地对树中所有节点进行排序和检索. 排序二叉树 ...

  6. Linux内核之于红黑树and AVL树

    为什么Linux早先使用AVL树而后来倾向于红黑树?       实际上这是由红黑树的有用主义特质导致的结果,本短文依旧是形而上的观点.红黑树能够直接由2-3树导出.我们能够不再提红黑树,而仅仅提2- ...

  7. 红黑树和AVL树的区别(转)

    add by zhj: AVL树和红黑树都是平衡二叉树,虽然AVL树是最早发明的平衡二叉树,但直接把平衡二叉树等价于AVL树,我认为非常不合适. 但很多地方都在这么用.两者的比较如下 平衡二叉树类型 ...

  8. 数据结构和算法(Golang实现)(29)查找算法-2-3树和左倾红黑树

    某些教程不区分普通红黑树和左倾红黑树的区别,直接将左倾红黑树拿来教学,并且称其为红黑树,因为左倾红黑树与普通的红黑树相比,实现起来较为简单,容易教学.在这里,我们区分开左倾红黑树和普通红黑树. 红黑树 ...

  9. 论AVL树与红黑树

    首先讲解一下AVL树: 例如,我们要输入这样一串数字,10,9,8,7,15,20这样一串数字来建立AVL树 1,首先输入10,得到一个根结点10 2,然后输入9, 得到10这个根结点一个左孩子结点9 ...

随机推荐

  1. EF join

    两张表: var query = db.Categories // 第一张表 .Join(db.CategoryMaps, // 第二张表 c => c.CategoryId, // 主键 cm ...

  2. CentOS下启动和停止Tomcat

    启动Tomcat: 进入tomcat目录/bin,然后./startup.sh 停止Tomcat: 进入tomcat目录/bin,然后./shutdown.sh

  3. 使用PLSQL导入excel数据至oracle数据库

    https://blog.csdn.net/qq_42909551/article/details/82108754 https://jingyan.baidu.com/album/14bd256e2 ...

  4. 安卓之Android.mk多文件以及动态库编译

    1.多文件编译 多文件编译共有两种方式: (1) 在Android.mk中一一添加 LOCAL_PATH:= $(call my-dir) #定义当前模块的相对路径 include $(CLEAR_V ...

  5. NB-IoT物联网开发资料

    OneNET(移动平台) https://open.iot.10086.cn/ NB-IoT套件提供了一种方便用户使用NB模组将设备连接到OneNET平台实现丰富NB-IoT应用的能力.平台为用户提供 ...

  6. C语言 运算符优先级

    规律小结: 结合方向只有三个是从右往左,其余都是从左往右. 所有双目运算符中只有赋值运算符的结合方向是从右往左. 另外两个从右往左结合的运算符也很好记,因为它们很特殊:一个是单目运算符,一个是三目运算 ...

  7. 013-centos7 常用命令--查看当前用户的4种方法

    一.概述 4种查看系统用户信息(通过编号(ID))的方法. 1.1. 使用w命令查看登录用户正在使用的进程信息 w命令用于显示已经登录系统的用户的名称,以及他们正在做的事.该命令所使用的信息来源于/v ...

  8. QT中常用工具总结

    1.qmake 利用.pro文件生成Makefile 命令为: eg: qmake -o Makefile hello.pro 2. uic 利用ui界面审查.h头文件 命令为: eg: uic go ...

  9. c# 并行循环支持 async

    var bag = new ConcurrentBag<object>(); var tasks = myCollection.Select(async item => { // s ...

  10. [转]windows 下 gcc/g++ 的安装

    链接地址:https://www.jianshu.com/p/ff24a81f3637 不过下载地址直接进这里就可以了:https://sourceforge.net/projects/mingw/