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