0

これが私の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;
    }
}
}
4

2 に答える 2

1

findツリーの左側を再帰的にチェックする前に、チェックを移動してみてください。そうしないと、ノード自体を確認する前に、すべてのノードの左側に移動します。

else {
    // Moved to the top of the else
    int result = num - node.item;
    System.out.println(node.item);
    if(find(result)) {
        return true; 
    }
    // Then check recursively
    if(node.leftChild != null) {
        searchNum(node.leftChild, num);
    }
    if(node.rightChild != null) {
        searchNum(node.rightChild, num);
    } 

   return false;
}
于 2013-09-19T16:06:45.950 に答える