1
各ノードに固定要素を持つ複数要素のノードを持つJavaでBtreeを実装しようとしています。ツリーの挿入メソッドを作成しようとしています。複数要素のノードJavaでBtreeを実装する
私のコードでは、例えば、各ノードは3つの要素を含み、各要素は2つの子ノード(左と右)を指します。これは2,3ツリーに似ていますが、各ノードの要素の数はもっと多くなり、各ノードは固定長要素を持ちます。 基本的に、ノードが分割されると、中央の要素は昇格を取得します。 この画像は、インサートがどのように動作するかを示しています。
これは私のコードですが、私はルートノードを作り始めるために書いているが、私は、挿入および分割方法の再利用により、木が大きくする方法がわかりません。
public class BTree {
private Node root = null;
int maxElementInNode = 3;
public class Node {
//each node contain 3 elements
Element[] elements;
Element leftParent;
Element rightParent;
public Node(){
}
}
public class Element{
int key;
String rId;
Node leftNode;
Node rightNode;
public Element(int key, String rId){
this.key = key;
this.rId = rId;
}
}
//add new element to tree
public void addElement(int key, String rId){
//add element to root node
if(root == null){
root = new Node();
if (root.elements.length < maxElementInNode){
for(int i = 0; i<root.elements.length;i++){
if(root.elements[i] == null){
root.elements[i] = new Element(key, rId);
Arrays.sort(root.elements);
break;
}
}
//need to split
}else{
root = new Node();
split(root);
}
}
}
public void split(Node nodeToSplit){
if(root.elements == null){
//first element of root = median element of split node
root.elements[0] = nodeToSplit.elements[(maxElementInNode+1)/2];
}
Element[] leftChildNode = new Element[maxElementInNode];
Element[] rightChildNode = new Element[maxElementInNode];
for(int i = 0; i< (maxElementInNode+1)/2;i++){
leftChildNode[i] = nodeToSplit.elements[i];
}
Node left = new Node();
left.rightParent = nodeToSplit.elements[(maxElementInNode+1)/2];
left.elements = leftChildNode;
for(int j = ((maxElementInNode+1)/2)+1; j< maxElementInNode;j++){
int i = 0;
rightChildNode[i] = nodeToSplit.elements[j];
i++;
}
Node right = new Node();
right.elements = rightChildNode;
right.leftParent = nodeToSplit.elements[(maxElementInNode+1)/2];
}
}
は、画像へのリンクを投稿し、私はそれを – c0der
を追加します私は、あなたが機能を追加する前に対処する必要があるいくつかの基本的な問題があると思います'Node'フィールド(elements、leftParent、rightParent)は使用されません。コンストラクターまたはセッターを使用して初期化する必要があります。同じことが 'Element'(leftNode、rightNode)にも当てはまります。また、 'addElement'はヌルルートにのみ追加することができます。 – c0der
ありがとう、私はちょうどイメージを置く、私はJavaで非常によくはない、ちょうどJavaコースの導入しました。私はインターネット上のいくつかのコードを検索しましたが、それは私にはあまり役に立ちません。 –