次のコードを理解する上で問題があります。それはツリーのデータ構造であり、addnode()
メソッドで2つのノード(親とfocusnode
)が必要な理由はわかりません。私はちょうどfocusnode
でそれをやろうとしましたが、うまくいきません。私の考えはfocusnode
をrootに設定し、focusnode
がnull
に等しくなるまでループし続け、focusnode
をnewnode
に設定します。ツリーデータ構造addnode
public class tree {
node root;
public class node{
private int key;
private node left;
private node right;
node(int key){
this.key = key;
}
public int getkey(){
return key;
}
public node getleft(){
return left;
}
public node getright(){
return right;
}
}
public void addnode(int key){
node newnode = new node(key);
if(root == null){
root = newnode;
}else{
node focusnode = root;
node parent;
while(true){
parent = focusnode;
if(key < focusnode.key){
focusnode = focusnode.left;
if(focusnode == null){
parent.left = newnode;
return;
}
}else{
focusnode = focusnode.right;
if(focusnode == null){
parent.right = newnode;
return;
}
}
}
}
}
public void runnode(node focusnode){
if(focusnode != null){
runnode(focusnode.left);
runnode(focusnode.right);
System.out.println(focusnode.key);
}
}`
親を取り除いてfocusnodeを参照として使用できませんか? – user3725988
'focusnode'が' .left'/'.right'ノードを指しています。 'newnode'を' focusnode'に割り当てると 'focusnode'は' .left'/'.right'(現在は' null')を参照するのではなく、 'newnode'を参照します。しかし、 'parent'を覚えていれば、' parent.left'と言うことができ、ツリーの構造に依存している親の '.left' /' .right'の参照を変更することができます。 'focusnode'への代入は' parent.left'が参照しているものを変更しません。 –