概述

关于树的概念很多,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

最新文章

  1. Phonegap开发的前后台数据交互
  2. Spring源码学习之:spring注解@Transactional
  3. PHP开发框架--CodeIgniter(CI)使用总结
  4. C++ 牛人博客(不断更新中...)
  5. debian 颜色设置
  6. WPF——文本随滚动条改变而改变
  7. UIView层次管理bringSubviewToFront,sendSubviewToBack
  8. Do Palapala (this)
  9. 如何使用for循环连续的实例化多个对象!
  10. 4.锁--Synchronizer Framework Base Class—AbstractQueuedSynchronizer介绍
  11. LoadRunner性能测试过程中报Error(-17998):Failed to get [param not passed in call] thread TLS entry.
  12. 【转】Spring Bean单例与线程安全
  13. Spark Streaming VS Flink Streaming
  14. datalist 分页
  15. vue框架构建项目流程
  16. 软件开发者路线图梗概&书摘chapter3
  17. 安装gcc
  18. CentOS7.1 KVM虚拟化之环境准备
  19. GOIP connects with Elastix through “config by line”
  20. Android笔记之 网络http通信

热门文章

  1. HDU 3410【单调栈】
  2. nodejs ejs 引擎脱离express使用
  3. 自动化测试 Cucumber
  4. CentOS 7 部署 nginx-1.14.2
  5. 黑马学习JavaWeb入门总结
  6. CC33:碰撞的蚂蚁
  7. UVa1471
  8. Git关于Tag操作
  9. (转)nginx限制上传大小和超时时间设置说明/php限制上传大小
  10. windows无法启动redis服务,错误码1067