二叉搜索树

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

平衡二叉树

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

平衡算法

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

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. udf也能用Python

    具体步骤见<fluent加载第三方(C++,Fortran等)动态链接库> 我们对导入的动态链接库进行改动 打开VS2013 完成了上述过程以后,还需要配置Python 首先需要安装Pyt ...

  2. 2019 SDN第3次上机作业

    0.报文类型与含义 1.Controller-to-Switch 报文 ​ Cortoller-to-Switch是由控制器初始化并下发给交换机的报文类型,其可能会要求交换机回复对应的报文,此类型报文 ...

  3. Alpha3

    队名:福大帮 组长博客链接:https://www.cnblogs.com/mhq-mhq/p/11899921.html 作业博客 :https://edu.cnblogs.com/campus/f ...

  4. linux声卡录音和播放(alsa方法)

    前言 客户购买多台UNO-2184,使用fedora23系统进行视频监控,视频监控的同时,也要同步采集现场画面的声音,原来系统采用的是fedora 14,之前是通过操作/dev/bsp,对声卡进行操作 ...

  5. Layui 点击查询分页,页码不刷新解决方法

    Layui 点击查询分页,页码不刷新解决方法 function queryDataGrid() { layui.table.reload(tableName, { where: { //设定异步数据接 ...

  6. oracle的insert的时候&符号如何插入

    chr(38)替换& insert   into   table   values( 'http://localhost:8080/index.action?username=138& ...

  7. dataTable.NET的search box每輸入一個字母進行一次檢索的問題

    當使用dataTable.NET時,可以通到簡單的setting來添加一個search box進行全表格的檢索. $('#test-listing') .on('order.dt', function ...

  8. [LeetCode] 362. Design Hit Counter 设计点击计数器

    Design a hit counter which counts the number of hits received in the past 5 minutes. Each function a ...

  9. mac的brew安装tomcat以及idea设置

    Tomcat安装 brew search tomat 有tomcat@7. tomcat@8. tomcat最新版本(即tomcat9)三个版本 brew install tomcat 启动tomca ...

  10. java开发异常Exception集锦

    背景:整理开发过程中的异常问题 java.lang.Exception: No tests found matching 一般出现在新导入的工程中.在sts中通过open project的方式导入工程 ...