目录
1 介绍
树家族是为了实现方便快捷的查找而存在的。树的高度是命中查找的一个不可抗拒的时间下限。在一定的数据条件下,树的高度和宽度是相互制约的。对于二叉树来说,虽然易于实现,却没有实际的价值。因为二叉树的宽度固定,使树的高度无法减小,因此出现了多叉树。B树、B+树都属于多叉树。MySQL和Berkeley DB都是基于B树原理而建立数据库的。B树是一种可实现的平衡多路查找树。平衡m叉查找树是指每个关键字的左侧子树与右侧子树的高度差的绝对值不超过1的查找树。
2 B树
2.1 B树的定义
B树在维基百科是这么定义的:“在计算机科学中,B树(B-Tree)是一种树状数据结构,它能够存储数据,对其进行排序并允许以O(log n)的时间复杂度运行进行查找、顺序读取、插入和删除的数据结构。B树,概括来说是一个节点可以拥有多于2个子节点的二叉排序树。与自平衡二叉查找树不同,B-树为系统最优化大块数据的读和写操作。普遍运用在数据库和文件系统。”
B树中所有节点的最大孩子节点数被称为B树的阶,通常用m来表示。一棵m阶B树可以是一棵空树,也可以是满足一下条件的m叉树。
1)每个节点最多有m个子结点,即每个节点最多有m-1个关键字;最少子节点要看是否为根节点,如果是非叶子节点的根节点,则至少要有2个节点,其他非根节点非叶节点至少要有[m/2]个节点,[m/2]表示m/2向上取整。
2)如果一个节点有n-1个关键字,则子节点有n个。这n-1个关键字按照递增的顺序排列。
3)每个节点的结构为:
n | k1 | k2 |
.... | kn |
p0 | p1 | p2 | ... | pn |
其中,n为节点中关键字的个数;ki为该节点的关键字且ki<k(i+1);pi为该节点的孩子节点指针且满足pi所指向的子节点的关键字都大于ki且小于k(i+1),p0所指向的子节点的关键字小于k1,pn所指向的子节点的关键字大于kn。