B + Tree首先插入

时间:2015-09-16 05:13:48

标签: java algorithm b-tree

我正在尝试在java中实现B +树。如果第一个插入仅保存在叶子中,或者有两个条目,即一个在root中,指向叶子,一个在叶子中(带有数据指针),我感到很困惑。

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

如果我只是在叶子中输入它,我的根将是叶子类型。我不确定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];
    }
}

Leaf

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在B +中,数据条目仅存储在叶子中,而内部(非叶子)节点仅存储密钥。是否允许root本身是leaf是你的调用,但我认为如果root永远不是叶节点,实现会稍微容易一些,并且在第一次插入时,你创建一个后继叶节点。在您的实现中,数据和密钥似乎是相同的,这就是导致混淆的原因。我仍然建议你考虑这两个不同的东西 - 内部节点中的值是"键"并且叶子中的值是"数据"。这样可以更轻松地更改B +树以存储不同的内容。