概述

关于树的概念很多,B树,B+树,红黑树等等。

但是你去翻翻百度百科,或者用百度或者谷歌搜索一下中文的树结构的介绍,全都是狗屁。没有哪个中文网站是真正精确解释树的定义的,尤其是百度百科。

下面我要根据我自己的学习和理解。给出一些中文的定义。

什么是二叉树(Binary Tree)

二叉树是每个节点最多有两个子节点的树。

二叉树的叶子节点有0个字节点,二叉树的根节点或者内部节点有一个或者两个字节点。

什么是二叉搜索树(Binary Search Tree)

二叉查找树又叫二叉搜索树,

它或者是一棵空树,或者是具有下列性质的二叉树:

若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;

若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;

它的左、右子树也分别为二叉搜索树。

一个印象比较深的二叉搜索树就是问手机号。

假设你遇到一个美女想问他手机号,但是美女一般不告诉你数字。她只回答是否题。

那么你可以问她不超过14个问题就可以知道她手机号了。

假定手机号最大值是1000 0000 0000

是否大于500 0000 0000,开始分叉。

如果大于500 0000 0000,那么是否大于750 0000 0000。。。

如果小于500 0000 0000,那么是否大于250 0000 0000。。。

以此类推,这就是一个典型的二叉搜索树。看起来很神奇,其实源自于一种巧妙的数学。

什么是平衡二叉树(AVL Tree)

AVL树全称G.M. Adelson-Velsky和E.M. Landis,这是两个人的人名。

AVL树定义:

所有节点的左右子树的高度差小于1的二叉树。

如下图

根节点左边高度是3,因为左边最多有3条边;右边高度而2,相差1.

根节点左边的节点50的左边是1条边,高度为1,右边有两条边,高度为2,相差1。

什么是B树(B tree)

B树也叫或B-树、B_树。

B树英文官方定义:

1、Every node has at most m children.
2、Every non-leaf node (except root) has at least [m/2] child nodes.
3、The root has at least two children if it is not a leaf node.
4、A non-leaf node with k children contains k − 1 keys.
5、All leaves appear in the same level.

我理解的B树定义:

1、根结点至少有两个子节点;

2、每个非叶子节点并且非根节点最少有m/2个,即内部节点的字节点个数最少也有m/2个。

3、根节点最少有两个字节点。

4、有k个关键字(关键字按递增次序排列)的非叶结点恰好有k+1个孩子。

5、所有叶子节点在同一层,即所有叶子几点高度一致。

如下图(B树的内部节点可以存放数据,类似ZK的中间节点一样。B树不是每个节点都有足够多的子节点)

什么是B+树(B+ tree)

B+树是从B树衍生而来。

跟B的不同:

1、B+树非叶子节点不存放数据,只存放keys。

2、B+树的叶子节点之间存在指针相连,而且是单链表

如下图(其实B+树上二叉搜索树的扩展,二叉搜索树是每次一分为二,B树是每次一分为多)

现代操作系统中,磁盘的存储结构使用的是B+树机制,mysql的innodb引擎的存储方式也是B+树机制

数据结构参考资料

下面这个网站是一个介绍了很多数据结构的英文网站,可以参考下:

https://www.javatpoint.com/b-plus-tree

https://www.cnblogs.com/geektcp/p/9992213.html

二叉树、二叉搜索树、平衡二叉树、B树、B+树的精确定义和区别探究的更多相关文章

  1. 树&二叉树&二叉搜索树

    树&二叉树 树是由节点和边构成,储存元素的集合.节点分根节点.父节点和子节点的概念. 二叉树binary tree,则加了"二叉"(binary),意思是在树中作区分.每个 ...

  2. 树(二叉树 & 二叉搜索树 & 哈夫曼树 & 字典树)

    树:n(n>=0)个节点的有限集.有且只有一个root,子树的个数没有限制但互不相交.结点拥有的子树个数就是该结点的度(Degree).度为0的是叶结点,除根结点和叶结点,其他的是内部结点.结点 ...

  3. 第七章 二叉搜索树(d4)AVL树:(3+4)-重构

  4. 第七章 二叉搜索树 (d3)AVL树:删除

  5. 第七章 二叉搜索树 (d2)AVL树:插入

  6. 第七章 二叉搜索树 (d1)AVL树:重平衡

  7. 数据结构学习笔记_树(二叉搜索树,B-树,B+树,B*树)

    一.查找二叉树(二叉搜索树BST) 1.查找二叉树的性质 1).所有非叶子结点至多拥有两个儿子(Left和Right): 2).所有结点存储一个关键字: 3).非叶子结点的左指针指向小于其关键字的子树 ...

  8. 高度平衡的二叉搜索树(AVL树)

    AVL树的基本概念 AVL树是一种高度平衡的(height balanced)二叉搜索树:对每一个结点x,x的左子树与右子树的高度差(平衡因子)至多为1. 有人也许要问:为什么要有AVL树呢?它有什么 ...

  9. L3-016 二叉搜索树的结构 (30 分) 二叉树

    二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值:它的左.右子树也分别 ...

随机推荐

  1. 用 _tcscmp 替代 strcmp 或 wcscmp

    转自:http://blog.csdn.net/eickandy/article/details/50081537 好处:是可以不管是用unicode 编码还是其他 ,代码都不用改. C++标准库函数 ...

  2. 3dmax————

    去掉阴影 建模中去掉阴影,有时候阴影会挡住视野 , 显示法线 转到可编辑网格,选择面,选择 ,注意下面那个比例调大点,否则看不清楚

  3. poj2449(k短路&A_star模板)

    题目链接:http://poj.org/problem?id=2449 题意:给出一个有向图,求s到t的第k短路: 思路:k短路模板题,可以用A_star模板过: 单源点最短路径+高级搜索A*;A*算 ...

  4. python2与python3 版本区别

    目录 编码 输入输出 中文 除法 长整形 内置函数map xrange init reduce 字符串类型 dict字典 经典类 新式类 未完待补充 编码 python2默认编码器为ascii码(只支 ...

  5. Oracle GoldenGate部署系列

    在之前,为了某个项目,研究ogg 如何安装部署,已经对接大数据产品. 因为网上的很多资料都讲得不仔细,或者是版本对应不上,所以在部署时,遇到了非常多的困难. 作者根据自己的经验,录制了OGG整套部署和 ...

  6. katalon studio配置git与git项目创建

    katalon 是一款在2015年诞生的可以安装在windows.macOS.linux操作系统上,基于selenium 和 Appium 测试框架,并集成了这些框架的优点的自动化测试工具.关于这个工 ...

  7. 洛谷 P3381 【模板】最小费用最大流

    题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行包含四个正整数\(N.M.S.T\) ...

  8. Maven项目编译版本的问题和Spring中没有导入核心包

    idea中maven项目的编译: 方案1:maven的settings.xml中指定全局默认编译版本 <profile> <id>jdk-1.8</id> < ...

  9. 启动Eclipse时,出现 “Failed to load the JNI shared library "C:\Program Files\java\jdk1.7.....\jvm.dll"

    原因1:给定目录下jvm.dll不存在. 解决方法:(1)重新安装jre或者jdk并配置好环境变量. (2)copy一个jvm.dll放在该目录下. 原因2:eclipse的版本与jre或者jdk版本 ...

  10. js异步加载和按需加载

    function loadScript(url,callback){ var script = document.creatElement("script"); script.ty ...