平衡搜索树-BTree

本文介绍了B树的定义和性质,包括其作为平衡多叉搜索树的特征,以及通过代码实现B树的过程。同时,对比了B+树的特点,指出B+树在文件索引系统中的优势。此外,还提及了B*树,说明了其与B树和B+树的区别,尤其是更高的空间使用率。
摘要由CSDN通过智能技术生成

B树是一种适合外查找的树,是一种平衡 的多叉树。
一棵M阶(M>2)的B树,是一棵平衡的M路平衡搜索树,可以是空树或者满足一下性质:
1。根节点至少有两个孩子
2。每个非根节点有[M/2,M]个孩子
3。每个非根节点有[M/2-1,M-1]个关键字,并且以升序排列
4。每个节点孩子的数量比关键字的数量多一个。
5。 key[i]和key[i+1]之间的孩子节点的值介于key[i]、key[i+1]之间
6。 所有的叶子节点都在同一层
这里写图片描述
这里写图片描述
下面用代码来实现一下B树

#pragma once

template<class K, class V, size_t M>
struct BTreeNode
{
    pair<K, V> _kvs[M];   // 多开一个空间,方便分裂
    BTreeNode<K, V, M>* _subs[M+1];
    BTreeNode<K, V, M>* _parent;

    size_t _size; // 关键字的数量

    BTreeNode()
        :_parent(NULL)
        ,_size(0)
    {
        for (size_t i = 0; i < M+1; ++i)
        {
            _subs[i] = NULL;
        }
    }
};

template<class K, class V, size_t M>
class BTree
{
    typedef BTreeNode<K, V, M> Node;
public:
    BTree()
        :_root(NULL)
    {}

    pair<Node*, int> Find(const K& key)
    {
        Node* parent = NULL;
        Node* cur = _root;
        while (cur)
        {
            size_t i = 0;
            while(i < cur->_size)
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值