二叉搜索树的空指针异常错误



我正在尝试完成这个程序,但我不断收到这个空指针异常错误,我不确定如何解决这个问题。任何帮助将不胜感激。

这是我的错误:

Exception in thread "main" java.lang.NullPointerException
            at BinarySearchTree.insert(BinarySearchTree.java:45)
            at BinarySearchTree.insert(BinarySearchTree.java:37)
            at TreeDemo.main(TreeDemo.java:22)

这是第 45 行:int R = root.getString().compareTo(n.getString());

 line 37:    this.insert(root,n);

这是我的二叉搜索树类:

import java.util.Stack;

    import java.util.Stack;

    public class BinarySearchTree {
    private Node root, n;
    private int size;
       public BinarySearchTree () {
         root = null;
         size = 0;
       }
       public void add (Node b){
          if(root == null){     //tree is empty
             root = b;         
       }else{
         root.add (b);
      }
    }
    public void search(String word){

       Node n=new Node(word);
          this.search(root,n);
    }


       public void insert(String word){
           Node n = new Node(word);
           this.insert(root,n);
       }


      public void insert(Node start,Node n){
      int R = root.getString().compareTo(n.getString());
      if(R==-1)
      {//before
         if(start.left==null)
         {
            start.left=n;
         }
         else
         {
            insert(start.left,n);
         }  
      }
      else if(R==1)
      {//after
         if(start.right==null)start.right=n;
         else insert(start.right,n);
      }
       else
        {
               start.nodeFreq++;
               //System.out.print(nodeFreq);
        }
     }
      public Node search(Node start, Node n){
       int R = root.getString().compareTo(n.getString());
      if(R==-1)
      {//before
         if(start.left==null)
         {
            return null;
         }
         else
         {
            insert(start.left,n);
         }  
      }
      else if(R==1)
      {//after
         if(start.right==null)return null;
         else insert(start.right,n);
         System.out.println("word found");
      }
      else
      {
               return start;
      }
      return start;
   }
   public void printPreOrder(){
      this.printPreOrder(root);
   }
   public void PreOrder(Node n){
      this.printPreOrder();
   }
   public void printInOrder(){
      this.printInOrder(root);
   }
   public void InOrder(Node n){
      this.printInOrder();
   }
   public void printPostOrder(){
      this.printPostOrder(root);
   }
   public void PostOrder(Node n){
      this.printPostOrder();
   }

   public void printPreOrder(Node root){
      if(root!=null){
         System.out.print(root+ " ");
         printPreOrder(root.leftNode());
         printPreOrder(root.rightNode());
      } 
   }
   public static void printInOrder(Node root){
      if(root != null){
         printInOrder(root.left);
         System.out.print(root + " ");
         printInOrder(root.right);
      }
   }
   public static void printPostOrder(Node root){
      if(root!=null){
         printPostOrder(root.leftNode());
         printPostOrder(root.rightNode());
         System.out.print(root + " ");
      }
   }
   }

如果将节点插入到空树中,则node null。此外,我认为它应该int R = start.getString().compareTo(n.getString());在您的代码中,您应该首先判断start != null.

最新更新