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 为空,然后为您的情况做一些有意义的事情