字符串二进制树给我错误Java

时间:2013-10-15 21:03:27

标签: java

我有二叉树,它保存了.txt文件中出现的变量和行。我之前曾在方法中错误地创建了新节点,以检查它是否包含在内,从而创建了丰富的节点。此时它打印了正确的信息,但随后退出并出现错误。我意识到这一点,并将其移动到插入方法,但现在打印只给我一个错误,没有结果。我一直在努力解决这个问题,我无法弄清楚它有什么问题。非常感谢任何帮助。

这两种方法的代码是:

public void insert(String inputVar, int line, BinaryNode t)
{
    if (t.var == null)
    {
        t.var = inputVar;
        t.lines[t.count] = line;
        t.count++;
    }
    else if (inputVar.compareTo(t.var) < 0)
    {
        if (t.left == null)
            t.left = new BinaryNode(100);
        insert(inputVar, line, t.left);
    }
    else if (inputVar.compareTo(t.var) > 0)
    {
        if (t.right == null)
            t.right = new BinaryNode(100);
        insert(inputVar, line, t.right);
    }
}
public void printTree(BinaryNode t)
{
    if (t.var == null)
    {   
    }
    else if (t.left == null && t.right !=null)
    {
        System.out.printf("The variable %s appears at lines ", t.var);
        for (int l = 0; l < t.count; l++)
        {
            System.out.printf("%d ", t.lines[l]);
        }
        System.out.println();
        printTree(t.right);
    }
    else if (t.right == null && t.left != null)
    {
        printTree(t.left);
        System.out.printf("The variable %s appears at lines ", t.var);
        for (int l = 0; l < t.count; l++)
        {
            System.out.printf("%d ", t.lines[l]);
        }
        System.out.println();

    }
    else
    {
        printTree(t.left);
        System.out.printf("The variable %s appears at lines ", t.var);
        for (int l = 0; l < t.count; l++)
        {
            System.out.printf("%d ", t.lines[l]);
        }
        System.out.println();
        printTree(t.right);
    }   
}

我从printTree中的if语句中收到错误。

2 个答案:

答案 0 :(得分:0)

当两个else都可以到达最后一个案例(printTree()中的t.right == null && t.left == null),因此您使用两个(null)子项进行递归调用,然后在第一次检查中使用NPE < br {> if(t.var == null)其中t为空

答案 1 :(得分:0)

您的基本情况为t == null,但您的代码无法处理该情况。也就是说,空树不是没有变量的节点,而是空节点。

为什么你的打印方法必须如此复杂?

public void printTree( BinaryNode t ) {
    if ( null == t )
        return;
    printTree( t.left );
    System.out.printf( "The variable %s appears at lines ", t.var );
    for ( int l = 0; l < t.count; l++ )
        System.out.printf( "%d ", t.lines[ l ] );
    System.out.println();
    printTree( t.right );
}