0

二分木に格納された文字列を検索するために何をする必要があるかわかりません。検索メソッドを書いていますが、何を渡せばよいのかよくわかりません。ツリーに追加する前に文字列を検索する必要があります。見つかった場合は、新しいカウンターを追加するのではなく、ノード オブジェクト内のカウンターを増やすだけです。ちなみにツリーは未分類です。

私の質問は、追加する前にどのように検索するのですか?

System.out.println("Enter string to be stored");
stringValue = k.nextLine();
if (theString.isEmpty() == true) {
    node.add(stringValue, count);
} else {
    // I am not sure what to do here
    // How do I send the string to my search method?
    stringValue.treeSearch();
}

public Node treeSearch(String s, TreeNode root){

    if(root.toString().equals(s)){

        return root;
    }
    if(left != null){

        left.treeSearch(s, root.left);
        if(root.toString().equals(s)){
            return root;
        }
    }
    if(right != null){

        right.treeSearch(s, root.right);
        if(root.toString().equals(s)){
            return root;
        }
    }else{
          return null;
            }
}

検索方法をこれに更新します。

 public Node treeSearch(String s, Node root){

 if(root.toString().equals(s)){

    return root;
    }
    if(left != null){

       left.treeSearch(s, root.left);
       return root;
    }
    if(right != null){

      right.treeSearch(s, root.right);
          return root;
    }else{
         return null;
    }
}
4

1 に答える 1

1

左右のサブツリーを検索する方法にバグがあります。例えば:

if (left != null) {
    left.treeSearch(s, root.left);
    if (root.toString().equals(s)) {
        return root;
    }
}

そのため ... 左のサブツリーを検索しますが、検索結果を無視して ... と比較srootます。

右側のサブツリーについても同じパターンが繰り返されます。

(これは「学習演習」の匂いがするので、修正を理解するためにあなたに任せます。)


そうは言っても、バイナリ ツリーの要素を順序付けしないと、データ構造としてほとんど役に立ちません。要素をリストまたは配列に格納することをお勧めします。(あなたの複雑さtreeSearchO(N)...リストや配列を検索するのと同じです。)

于 2013-04-01T14:20:15.807 に答える