在计算机科学中,B树是一种自平衡的树数据结构,广泛应用于数据库和文件系统中。它能够保持数据有序,并支持顺序访问和对数时间复杂度的查找、插入和删除操作。本教程将手把手教你使用Python实现一个完整的B树结构,即使你是编程新手也能轻松上手。

B树是一种多路搜索树,每个节点可以拥有多个子节点(通常为2到m个,m称为阶数)。与二叉搜索树不同,B树通过减少树的高度来提升磁盘I/O效率,特别适合处理大量数据。
B树的关键特性包括:
B树非常适合需要频繁读写磁盘的场景,比如数据库索引(如MySQL的InnoDB引擎)和文件系统(如NTFS、ReiserFS)。因为B树的高度较低,每次查找只需少量磁盘访问,极大提升了性能。
下面我们用Python实现一个阶数为4的B树(即每个节点最多3个键、4个子节点)。我们将实现以下核心功能:
insert(key):插入新键值search(key):查找键是否存在delete(key):删除指定键(本教程重点讲解插入)class BTreeNode: def __init__(self, leaf=False): self.leaf = leaf self.keys = [] # 存储键值 self.children = [] # 存储子节点指针class BTree: def __init__(self, t=2): # t 是最小度数,阶数 m = 2*t self.root = BTreeNode(True) self.t = t # 最小度数B树插入的核心思想是:永远不在满节点中插入。如果根节点满了,就先分裂根节点,再递归插入。
def insert(self, key): root = self.root # 如果根节点已满,则创建新根并分裂原根 if len(root.keys) == (2 * self.t - 1): new_root = BTreeNode(False) new_root.children.append(self.root) self.split_child(new_root, 0) self.root = new_root self._insert_non_full(self.root, key)def _insert_non_full(self, node, key): i = len(node.keys) - 1 if node.leaf: # 在叶子节点中插入 node.keys.append(None) while i >= 0 and key < node.keys[i]: node.keys[i + 1] = node.keys[i] i -= 1 node.keys[i + 1] = key else: # 找到应插入的子树 while i >= 0 and key < node.keys[i]: i -= 1 i += 1 # 如果子节点已满,先分裂 if len(node.children[i].keys) == (2 * self.t - 1): self.split_child(node, i) if key > node.keys[i]: i += 1 self._insert_non_full(node.children[i], key)def split_child(self, parent, i): t = self.t y = parent.children[i] # 要分裂的满子节点 z = BTreeNode(y.leaf) # 新节点 parent.children.insert(i + 1, z) parent.keys.insert(i, y.keys[t - 1]) # 将y的后半部分移到z z.keys = y.keys[t:] y.keys = y.keys[:t - 1] if not y.leaf: z.children = y.children[t:] y.children = y.children[:t]def search(self, key, node=None): if node is None: node = self.root i = 0 while i < len(node.keys) and key > node.keys[i]: i += 1 if i < len(node.keys) and key == node.keys[i]: return True elif node.leaf: return False else: return self.search(key, node.children[i])# 创建一个最小度数为2的B树(即阶数为4)b_tree = BTree(t=2)# 插入数据for key in [10, 20, 5, 6, 12, 30, 7, 17]: b_tree.insert(key)# 查找print(b_tree.search(6)) # Trueprint(b_tree.search(15)) # False通过本教程,你已经掌握了如何用Python实现B树数据结构,包括节点定义、插入逻辑和查找方法。B树虽然比二叉树复杂,但其在处理大规模数据时的优势无可替代。掌握B树插入删除操作不仅能加深你对数据结构的理解,也为学习数据库索引机制打下坚实基础。
建议你动手运行代码,尝试插入不同序列的数字,观察B树的结构变化。如果你对删除操作感兴趣,也可以在此基础上扩展实现。
希望这篇Python数据结构教程对你有所帮助!记得收藏并分享给其他正在学习Python B树实现的朋友。
本文由主机测评网于2025-12-14发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025127706.html