私はJavaを学んでいます。私は、Javaでの参照とC++での参照/ポインタの違いを理解するために、基本バイナリ検索を実装しようとしました。Javaでの参照
実装は
class Node{
public int value;
public Node left;
public Node right;
Node(int v){
this.value = v;
this.left = null;
this.right = null;
}
}
class binarySearch{
public Node root;
public Node insert(int value , Node r){
if(r == null){
return new Node(value);
}
if(r.value < value){
r.left = insert(value , r.left);
}else{
r.right = insert(value , r.right);
}
return r;
}
public void insertIt(int v){
this.root = insert(v , this.root);
}
binarySearch(){
this.root = null;
}
}
主
binarySearch b = new binarySearch();
b.insertIt(5);
b.insertIt(6);
Node p = b.root;
while(p != null){
System.out.println("Hi :" + p.value);
p = p.right;
}
(再帰を使用して)次のようであるが、左と右のノードがnullのままです。再帰は、新しく作成されたノードへの参照を戻さないので、値はルートノードの左/右ノードに挿入されません。
なぜJavaでこれが起こっていますか?再帰と参照のための特別な方法はありますか、またはJavaでリファレンスがどのように正確に機能していますか?
ご協力ありがとうございます。
[Javaが「参照渡し」または「渡し渡し」ですか?」(http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or) -pass-by-value) – Mordechai
@MouseEventいいえこれはロジックの問題です。 – jonhopkins
@trolkura上記のコードで出力されるものを正確に*含むことができますか?左/右のノードがnullのままになっていることをどのように知っていますか?上のコードは正しいノードのみをチェックします。ルートノード、左ブランチ、および右右ブランチを持つツリーを作成することを除いては –