树的基本概念
- 结点的度:一个结点含有的子结点个数称为该结点的度;
- 树的度:一棵树中,最大结点的度称为树的度;
- 根节点:没有父节点的节点为根节点;
- 叶子节点(树叶):没有子节点的节点叫做叶子节点;
- 父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点;
- 深度:对于任意结点n,n的深度为从根到n的唯一路径长,根结点的深度为0;
- 高度:对于任意结点n,n的高度为从n到一片树叶的最长路径长,所有树叶的高度为0;
树的分类
- 二叉树:每个父节点最多之哟两个子节点;
- 完全二叉树:每个腹肌欸但都有两个子节点,且叶子节点的深度差最大为1,叶子节点靠左排列。
- 满二叉树:每个父节点都有两个子节点,且叶子节点的深度相同;满二叉树属于完全二叉树。
- 二叉搜索树(BST):属于二叉树的一种,父节点的左边子节点的值小于父节点,父节点右边子节点的值大于父节点的值。
- AVL树(平衡二叉树):每个节点的左右子节点的高度差<=1。为二叉搜索树的一种;
- RBT(平衡二叉树):每个节点的左右子节点的深度差小于1倍。为二叉搜索树的一种。
- B树:分为B+树和B-树的一种、
B-树
B-树,也称为B树,是一种平衡的多叉树(可以对比一下平衡二叉查找树),它比较适用于对外查找。看下这几个概念哈:
- 阶数:一个节点最多有多少个孩子节点。(一般用字母m表示),可以理解为容量大小。
- 关键字:节点上的数值就是关键字
- 度:一个节点拥有的子节点的数量。
一颗m阶的B-树,有以下特征:
- 根结点至少有两个子女;
- 每个非根节点所包含的关键字个数 j 满足:⌈m/2⌉ - 1 <= j <= m - 1.(⌈⌉表示向上取整)
- 有k个关键字(关键字按递增次序排列)的非叶结点恰好有k+1个孩子。
- 所有的叶子结点都位于同一层。
一棵简单的B-树如下:
B+树
B+ 树简介
B+树是B-树的变体,也是一颗多路搜索树。一棵m阶的B+树主要有这些特点:
- 每个结点至多有m个子女;
- 非根节点关键值个数范围:⌈m/2⌉ - 1 <= k <= m-1
- 相邻叶子节点是通过指针连起来的,并且是关键字大小排序的。
B+树和B-树的对比
B+树和B-树的主要区别如下:
- B-树内部节点是保存数据的;而B+树内部节点是不保存数据的,只作索引作用,它的叶子节点才保存数据。
- B+树相邻的叶子节点之间是通过链表指针连起来的,B-树却不是。
- 查找过程中,B-树在找到具体的数值以后就结束,而B+树则需要通过索引找到叶子结点中的数据才结束
- B-树中任何一个关键字出现且只出现在一个结点中,而B+树可以出现多次
借鉴地址:链接