繁体   English   中英

B +树第一次插入

[英]B+ Tree first insert

我正在尝试在Java中实现B +树。 我很困惑,如果第一个插入片段仅保存在叶子中,或者有2个条目,即根中的一个,指向叶子,而叶子中的一个(带有数据指针)。

如果我尝试在两者中都输入它,则我将有2个叶子节点,几乎是空的。

如果我只是在leaf中输入,我的根将是leaf类型。 我不确定root是否可以是leaf类型。

public class BTree {
    private BTreeInnerNode root;
    private int fanout = 3;
    public BTreeInnerNode getRoot() {
        return root;
    }

    public BTree(int fanout) {
        this.fanout = fanout;
    }

    public BTree(){
        root = new BTreeInnerNode(fanout);
    }
}

节点

public class BTreeInnerNode extends BTreeNode {
    public BTreeNode[] children;
    public BTreeInnerNode(int fanout){
        super(fanout);
        nodeType = NodeType.Node;
        children = new BTreeInnerNode[2*fanout];
    }
}

public class BTreeLeafNode extends BTreeNode {
    public int[] rid;
    public BTreeLeafNode(int fanout) {
        super(fanout);
        nodeType = NodeType.Leaf;
        rid = new int[(2*fanout)-1];
    }
}

谢谢你的帮助。

在B +中,数据条目仅存储在叶子中,而内部(非叶子)节点仅存储键。 是否允许根本身成为叶子是您的要求,但是我认为,如果根永远不是叶子节点,并且在第一次插入时创建后继叶子节点,则实现会稍微容易一些。 在您的实现中,数据和密钥似乎是同一回事,这就是造成混乱的原因。 我仍然建议您考虑这两件事-内部节点中的值是“键”,叶子中的值是“数据”。 这将使更改B +树以存储其他内容变得更加容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM