2012-03-19 10 views
0

文字列のArrayListからBSTに値を追加しています。私は "tree.add(s);"という行にNULLポインタエラーが発生しています。私のコードをトレースした後、なぜこれが起こっているのか理解できません。誰かが助けてくださいすることができますBSTに文字列を追加する際にエラーが発生する

public class BinaryTree { 

public Node root; 
public BinaryTree tree; 

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) { 

    Collections.shuffle(dict); 

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

    System.out.print(tree); 
    System.out.println(); 
    return tree; 

} 

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

public boolean search(String data) { 
    return (search(root, data)); 
} 

private boolean search(Node node, String data) { 
    if (node == null) { 
     return (false); 
    } 

    if (data == node.data) { 
     return (true); 
    } else if (data.compareTo(node.data) > 0) { 
     return (search(node.left, data)); 
    } else { 
     return (search(node.right, data)); 
    } 
} 

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

あなたはそれを使用する前に、何かにtree変数を設定する必要があります。たとえば:

public BinaryTree plantTree(ArrayList<String> dict) { 

    tree = new BinaryTree(); // important! 

    Collections.shuffle(dict); 

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

    System.out.print(tree); 
    System.out.println(); 
    return tree; 

} 

たぶんtreeは、メソッドのローカル変数ではなく、インスタンス変数でなければなりませんか?

+0

それは私の問題を解決しました。どうもありがとう! –

+0

もう一つの質問があります。「ツリー」の各値を出力するためにtoString()メソッドを実装するにはどうすればよいでしょうか。私がSystem.out.print(tree)を使うと、それは奇妙な値を出力します。前に見ましたが、toString()メソッドをオーバーライドして正しく出力すると思います。 –

+0

あなたの 'toString'は、デフォルトをオーバーライドするために正しく宣言されていないようです。あなたは新しい質問をしてもあなたはもっと広い聴衆を得るでしょう。 – Joni

関連する問題