添加到树中时的二进制搜索树NPE

时间:2018-12-14 04:59:40

标签: java nullpointerexception binary-tree binary-search-tree

我正在尝试编程一个二进制搜索树,该树使用整数作为等级(0-7),其中左节点可以小于或等于当前节点,因此您可以有多个具有相同等级的节点。当我尝试入队时,我得到了一个空指针异常,但是我不明白为什么原因,因为我根本没有更改头节点。任何帮助将不胜感激,谢谢!

class PriorityQueue<Base>
{
  private class Node
  {
    private Base object;
    private int  rank;
    private Node left;
    private Node right;

    private Node(Base object, int rank)
    {
      this.object = object;
      this.rank = rank;
      left = null;
      right = null;
    }
  }

  private Node head;

  public PriorityQueue(){
    Node head = new Node(null, 8);
  }

  public Base dequeue(){
    if (head == null){
      throw new IllegalStateException("no");
    }
    else{
      Node above = head;
      Node temp = head.left;
      while (temp.left != null)
      {
        above = above.left;
        temp = temp.left;
      }
      above.left = temp.right;
      return temp.object;
    }
  }

  public void enqueue(Base object, int rank){
    if(rank < 0){
      throw new IllegalArgumentException("no");
    }
    else{
      if(head.left == null){
        head.left = new Node(object, rank);
      }
      else{
        Node subtree;
        subtree = head.left;
        while(true){
          if(subtree.rank < rank){
            if(subtree.right == null){
              subtree.right = new Node(object, rank);
              return;
            }
            else{
              subtree = subtree.right;
            }
          }
          else if(subtree.rank == rank){
            while(subtree.left != null){
              subtree = subtree.left;
            }
            subtree.left = new Node(object, rank);
            return;
          }
          else if(subtree.rank > rank){
            if(subtree.left == null){
              subtree.left = new Node(object, rank);
              return;
            }
            else{
              subtree = subtree.left;
            }
          }
        }
      }
    }
  }

  public boolean isEmpty(){
    return head == null;
  }

}

0 个答案:

没有答案