关于B树图示的技术疑问:多同级节点、双值节点及多子节点解析
问题1:为何部分B树图示的同一层级存在多个节点?
B树是多路平衡搜索树,和二叉搜索树的核心区别在于它允许单个节点拥有多个子节点。当某个节点存储的键值数量达到上限时,会触发分裂操作,生成多个同级节点,以此维持树的高度平衡,保证查询、插入、删除操作的时间复杂度稳定在O(log n)。这种设计是为了适配磁盘存储场景,减少磁盘IO的次数,所以同一层级出现多个节点是B树的正常结构特征。问题2:部分图示中的节点没有单个值,反而包含两个值,它们想要表示什么?
B树节点可以存储多个排序后的键值,这些键值的作用是划分不同子节点的取值区间。比如一个节点包含键值k1和k2,那么它的子节点分别对应三个区间:小于k1的数据集、介于k1和k2之间的数据集、大于k2的数据集。节点存储多键值是为了压缩树的高度,进一步降低磁盘IO的开销,这也是B树高效处理大规模数据的关键设计之一。问题3:第二个图示中,若8的左右子节点为6和7是合理的,但我无法理解第一个图示中100为何有2个左子节点和2个右子节点,请问我忽略了什么要点?
你忽略了B树的核心规则:一个拥有m个键值的节点,对应m+1个子节点。第一个图示里的100所在节点,实际包含了多个键值(比如可能是[50, 100, 150],只是图示仅标注了100),因此对应4个子节点——这4个子节点分别对应<50、50100、100150、>150四个区间,看起来就是2个“左子节点”和2个“右子节点”。而第二个图示中的8是单个键值的节点,所以仅对应2个子节点(<8和>8),完全符合B树的规则。
内容的提问来源于stack exchange,提问作者Ben

