java.lang.NullPointerException 从前序和中序创建 BinaryTree
java.lang.NullPointerException while creating BinaryTree from preorder and inorder
我不知道为什么这段代码会抛出运行时错误
static class TreeNode<E>
{
E data;
TreeNode<E> right, left;
TreeNode(E data)
{
this.data=data;
right=left=null;
}
}
inpte:在手动实现的 LinkedList 中存储顺序。
preptr:将预订存储在手动实现的 LinkedList 中。
num: 存储树中节点的总数。
TreeNode<E> construct(Node<E> inptr, Node<E> preptr, int num)
{
TreeNode<E> tmp;
Node<E> q;
int i,j;
if(num==0)
{
System.out.println("No node to create the tree");
return null;
}
tmp=new TreeNode<E>(preptr.data); //error line
if(num==1)
return tmp;
q=inptr;
for(i=0;q.data!=preptr.data;i++)
q=q.next;
tmp.left=construct(inptr, preptr.next, i);
for(j=1;j<=i+1;j++)
preptr=preptr.next;
tmp.right=construct( q.next, preptr, num-i-1);
return tmp;
}
抛出错误:
Exception in thread "main" java.lang.NullPointerException
at practiceCodes.PreAndIn.construct(PreAndIn.java:32)
at practiceCodes.PreAndIn.main(PreAndIn.java:104)
您突出显示的行上的 preptr
为空。它是空的,因为你通过 preptr.next
递归调用 construct
但并不总是 preptr.next
所以你需要在调用 [=11= 之前检查 preptr.next
是否存在] 或者您需要检查 construct
如果 arg 为空,然后为您的情况做一些有意义的事情
我不知道为什么这段代码会抛出运行时错误
static class TreeNode<E>
{
E data;
TreeNode<E> right, left;
TreeNode(E data)
{
this.data=data;
right=left=null;
}
}
inpte:在手动实现的 LinkedList 中存储顺序。 preptr:将预订存储在手动实现的 LinkedList 中。 num: 存储树中节点的总数。
TreeNode<E> construct(Node<E> inptr, Node<E> preptr, int num)
{
TreeNode<E> tmp;
Node<E> q;
int i,j;
if(num==0)
{
System.out.println("No node to create the tree");
return null;
}
tmp=new TreeNode<E>(preptr.data); //error line
if(num==1)
return tmp;
q=inptr;
for(i=0;q.data!=preptr.data;i++)
q=q.next;
tmp.left=construct(inptr, preptr.next, i);
for(j=1;j<=i+1;j++)
preptr=preptr.next;
tmp.right=construct( q.next, preptr, num-i-1);
return tmp;
}
抛出错误:
Exception in thread "main" java.lang.NullPointerException
at practiceCodes.PreAndIn.construct(PreAndIn.java:32)
at practiceCodes.PreAndIn.main(PreAndIn.java:104)
preptr
为空。它是空的,因为你通过 preptr.next
递归调用 construct
但并不总是 preptr.next
所以你需要在调用 [=11= 之前检查 preptr.next
是否存在] 或者您需要检查 construct
如果 arg 为空,然后为您的情况做一些有意义的事情