0

我有一棵二叉树,它保留了它们从 .txt 文件中出现的变量和行。我之前错误地将新节点的创建放在检查其是否包含的方法中,从而创建了丰富的节点。那时它打印了正确的信息,但随后出现错误退出。我意识到了这一点并将其移至插入方法,但现在 print 只给我一个错误而没有结果。我已经为此苦苦挣扎了一段时间,但我无法弄清楚它有什么问题。任何帮助将不胜感激。

我对这两种方法的代码是:

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 语句中得到一个错误。

4

2 回答 2

0

您可能会遇到最后一种情况(else在 printTree() 中),因此您使用两个( null )孩子进行递归调用,然后在第一次检查时t.right == null && t.left == null落在 NPE 上
if(t.var == null)t

于 2013-10-15T21:26:26.473 回答
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 );
}
于 2013-10-15T21:26:48.380 回答