これが私のfind()メソッドです:
public boolean find(int key) {
BinTreeNode node = findHelper(key, root);
if (node == null) {
return false;
} else {
return true;
}
}
private BinTreeNode findHelper(int key, BinTreeNode node) {
if (node == null) {
return null;
}
if(key == node.item) {
return node;
}
else if(key < node.item) {
return findHelper(key,node.leftChild);
}
else {
return findHelper(key,node.rightChild);
}
}
これが私の変更されたコードです。それはまだ動作しません:(
public boolean searchNum(BinTreeNode node, int num) {
if(node == null) {
return false;
}
else {
int result = num - node.item;
if(find(result)) {
return true;
}
if(node.leftChild != null) {
searchNum(node.leftChild, num);
}
if(node.rightChild != null) {
searchNum(node.rightChild, num);
}
return false;
}
}
特定の数値が二分探索木の任意の 2 つの数値の合計に等しいかどうかを調べようとしています。エラーの場所はわかっていますが、それを修正する方法がわかりません。
次の行
if(find(result)) {
return true;
}
メソッドを終了する必要があるのは、true を取得したら、それで十分であり、呼び出し元の関数に値を返す必要があるからです。ただし、再帰は引き続き実行され、最終的に最後の再帰呼び出しから値が返されます。助けてください。
public boolean searchNum(BinTreeNode node, int num) {
if(node == null) {
return false;
}
else {
if(node.leftChild != null) {
searchNum(node.leftChild, num);
}
int result = num - node.item;
System.out.println(node.item);
//I have a separate find() which finds if the key is in the tree
if(find(result)) {
return true;
}
if(node.rightChild != null) {
searchNum(node.rightChild, num);
}
return false;
}
}
}