概述

关于树的概念很多,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. 伪类选择器 :nth-child(even) :nth-child(odd) :nth-of-type

    属性 描述 CSS :active 向被激活的元素添加样式. 1 :focus 向拥有键盘输入焦点的元素添加样式. 2 :hover 当鼠标悬浮在元素上方时,向元素添加样式. 1 :link 向未被访 ...

  2. 基于Unity 5的次世代卡通渲染技术 -- Unite 2017 米哈游总监贺甲分享实录

    在5月12日Unite2017开发者大会上,米哈游技术总监兼美术指导贺甲进行了主题为次世代卡通渲染的演讲.一下为详细分享内容: 大家好,首先自我介绍一下,我叫贺甲,在米哈游担任技术总监和美术指导工作, ...

  3. [UE4]如何替换角色Mesh上的Material材质

    http://www.dawnarc.com/2016/10/ue4%E5%A6%82%E4%BD%95%E6%9B%BF%E6%8D%A2%E8%A7%92%E8%89%B2mesh%E4%B8%8 ...

  4. c语言的小问题

    在c语言编程中要注意一个小问题,如果你编写scanf("%d",&n);printf("%d",n)这个你输入几就输出几,毫无疑问.但是现在问题来了?如 ...

  5. 剑指Offer的学习笔记(C#篇)-- 反转链表

    题目描述 输入一个链表,反转链表后,输出新链表的表头. 一 . 概念普及 关于线性表等相关概念请点击这里. 二 . 实现方法 目前,可以有两种方法实现该要求. 方法一:借助外部空间实现.这里可以将单链 ...

  6. 我的省选 Day -15

    Day  -15 23:22:45 还有十几天就要去参加省选啦~,今天开始写日记记录一下,所以今天是第负十五天. 今天是阶段考的第二天(由于奥赛不用考试的我7:30才慢悠悠地到机房 早上学习动态DP, ...

  7. gui - tkinter 开发

    GUI 用户交互界面 tkinter 介绍 tkinter python自带的gui库,对图形图像处理库tk的封装 其他gui:pythonwin,wxpython,pyQT.. 概念介绍 组件:组成 ...

  8. 洛谷 P3676 小清新数据结构题

    https://www.luogu.org/problemnew/show/P3676 这题被我当成动态dp去做了,码了4k,搞了一个换根的动态dp #include<cstdio> #i ...

  9. 洛谷P4719 【模板】动态dp

    https://www.luogu.org/problemnew/show/P4719 大概就是一条链一条链的处理(“链”在这里指重链),对于每一条链,对于其上每一个点,先算出它自身和所有轻儿子的贡献 ...

  10. SQL server 游标,随机数使用

    SELECT * FROM [goods] DECLARE test_cursor CURSOR scroll FOR SELECT goods_no, [unitprice] FROM [goods ...