user395817:
私はJavaで初心者と私は現在、木の章の演習を解決しようとしています。
ツリーは、これらのノードで構成されています。ここでは、画像の説明を入力します。ノードは整数に相当する値を保持します。別にツリーのルートにあるノードから、ノードは、常に参照していることを唯一の他のノードがあります。ノードが右または左に子がない場合は、対応する基準ですnull
。左側のサブツリー内のいずれかの子が保持している値は、彼の親の値と右のサブツリー内の任意の子が保持している値よりも小さいが、彼の親の値よりも大きいです。木の高さは、000 0〜100ノットです。
私が実装しようとしているfind(int v)
値を保持するノード返すメソッドv
、その後見つから存在しないノードを返却する必要があります場合はnull
。
これは私が知っているまで何をやったかですが、私は少し迷ってしまいました:
class Node{
Node left, right;
int value;
public Node find (int v){
Node result = null;
if (this.left != null) result = find(v);
if (this.value == v) return this;
if (result == null && this.right != null)
result = find(v);
return result;
}
public static void main (String[] args){
Node n = smallNode.find(8);
System.out.println(n);
n = LargestNode.find(0);
System.out.println(n);
}
}
私は取得していますStackoverOverflowError
。この行で:
if (this.left != null) result = find(v);
何が私が間違っているのでしょうか?それはこの例外を上昇している理由私は見つけることができません。
RAZ_nuh_ts:
あなたは、最初の値をチェックし返すべきであるthis
ノードは、あなたが探している値を持っている場合。ノードは、そうでない場合は、左側が与えるものは何でも返すことを正しい戻り場合は、戻ってきたら、それは、あなたが現在のノードから継続して右に行くことができますチェックしない場合は、指定された値で結果を確認してください。それはどちらかの必要な値はnullを持つノードになります。
public Node find (int v){
Node result = null;
//check for value first
if (this.value == v) return this;
//check if you can go any further from the current node
if(this.left == null && this.right == null) return null;
//now go right
result = this.right.find(v);
//check the node
if(result != null && result.value == v) return result;
//if not found return whatever is returned by searching left
return this.left.find(v);
}