0

一意の文字列値のみを保持するバイナリ ツリーがあります。(ユーザーが行う) 新しい文字列を入力する前に、ツリーを再帰的にチェックして、文字列が既に存在するかどうかを確認する必要があります。これが私が思いついた方法ですが、特定の値(ルートと私が信じている左のもの)しか見つけられません。これを修正する方法についてのヒントをいただければ幸いです。

public static TreeNode wordExists(TreeNode root, String strInput){
    if (root != null){

    if (strInput.equals(root.dataItem))
    {
        return root;
    }
    if (root.left != null){
        return wordExists (root.left, strInput);
    }
    if (root.right != null){
        return wordExists (root.right, strInput);
        }
    }
    return null;
}
4

1 に答える 1

2

各ブランチをナビゲートするときは、結果を返す前に結果を確認する必要があります。それ以外の場合、結果が右側の分岐のみにあり、左側に他の非 null 値がある場合は、左側のパスに見つからないため、null を返すだけです。

だから代わりに

if (root.left != null) {
    return wordExists(root.left, strInput);
}
if (root.right != null) {
    return wordExists(root.right, strInput);
}

あなたは次のようなことをするかもしれません

TreeNode result;
if ((result = wordExists(root.left, strInput)) != null) {
    return result;
}
return wordExists(root.right, strInput);

2 番目の再帰でショートカットを使用して回避できます。これが失敗した場合は、とにかく null を返すだけだからです。

于 2012-11-21T03:55:13.740 に答える