2012-03-21 4 views
0

各ノードを文字列値に設定するBSTを作成しましたが、ツリーを検索する方法はあるのですが、一度に1つの値だけを検索する方法があるのだろうかと思いました。だから、ノードの文字列が "トラック"だったと言うと、ツリーを検索して "t"を返す方法はありますか?これは、ツリーを構築するための私が持っているコードです:BSTで検索する

public class BinaryTree { 

public Node root; 
public BinaryTree tree; 
public static int pos; 
public static Node[] theArray; 

private static class Node { 
    Node left; 
    Node right; 
    String data; 

    Node(String s) { 
     left = null; 
     right = null; 
     data = s; 
    } 
} 

public BinaryTree plantTree(ArrayList<String> dict) { 

    tree = new BinaryTree(); 

    Collections.shuffle(dict); 

    for (String s : dict) { 
     s.toUpperCase(); 
     tree.add(s); 
    } 

    return tree; 

} 

/** 
* Creates an empty binary tree 
*/ 
public BinaryTree() { 
    root = null; 
} 

public void add(String data) { 
    root = add(root, data); 
} 

private Node add(Node node, String data) { 
    if (node == null) { 
     node = new Node(data); 
    } else { 
     if (data.compareTo(node.data) > 0) { 
      node.left = add(node.left, data); 
     } else { 
      node.right = add(node.right, data); 
     } 
    } 

    return (node); 
} 

}

+1

質問が不明です – Adrian

答えて

1

多分私はあなたの質問に誤解しましたが、あなたは木を繰り返し何かをしたいように思えます。私は訪問者のパターンを使用します。 (これはとにかく宿題のように聞こえるので、標準パターンを使用しないでください)

public class Node<T>{ 
... 
    public void visitDepthFirst(Visitor<T> v){ 
     v.visit(this); 
     if (left != null){ 
      left.visitDepthFirst(v); 
     } 
     if (right != null){ 
      right.visitDepthFirst(v); 
     } 
    } 
} 

interface Visitor<T>{ 
    public void visit(T t); 
} 
... 
Node<String> root = ...; 
root.visitDepthFirst(new Visitor<String>(){ 
    public visit(String val){ 
     if ("truck".equals(val)){ 
      // do something 
     } 
    } 
}); 

私はあなたに幅広い検索をさせます。また、ジェネリックを使用してノードクラスをより使いやすくすることもできます。あなたのクラス構造はちょっと混乱します。ツリー自体をノードASとして使用することをお勧めします。結局のところ、ツリー内のすべてのノードは、ツリー自体です。 (合成パターンについて読む)

0

だから、あなたが最初の文字だけで、あなたのツリーを検索しようとしていることが表示されます。これは単語全体を返すのと同じくらい時間がかかります。だから、あなたはまだBSTトラバーサルまたは検索アルゴリズムを使用しなければなりません。

0

だからノード内の文字列は、「トラック」「t」をツリーを を検索して返す方法はありだったと言いますか?

本当に、私はこの質問については何も分かりません。
BSTをお持ちの場合は、バイナリ検索で検索します。それはそうです。

バイナリ検索では、要素が見つかるとtrueが返されます。独自のBSTを実装することはできますが、tのようにbooleanをとし、その値がツリーの一部でない場合はnullを返してください。

関連する問題