我正在尝试编程一个二进制搜索树,该树使用整数作为等级(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;
}
}