我有二叉树,它保存了.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语句中收到错误。
答案 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 );
}