在将节点插入红黑树之后,我正在尝试编写一个函数来平衡红黑树,但是我得到了一个空指针异常。在第 156 行,当我将 temp 分配给 node.parent.parent.right 时,temp 为 null,这意味着 node.parent.parent.right 为 null。我不确定为什么。任何人都可以查看我的代码并尝试帮助我弄清楚为什么会出现这个问题吗?
//Insert Fix function to balance tree after insertion
public void InsertFix(Node<T,U> node)
{
Node<T,U> temp = node.parent.parent;
if(node.parent == null)
{
System.out.println("parent is null");
}
while(node.parent.color == 1)
{
if(node.parent.equals(node.parent.parent.right))
{
temp = node.parent.parent.left; //uncle
if(temp.color == 1) //if red parent has red child
{
temp.color = 0; //change color of parent
node.parent.color = 0; //change color of uncle
node.parent.parent.color = 1; //change color of g-parent
node= node.parent.parent;
}
else
{
if(node.equals(node.parent.left))
{
node = node.parent;
//Perform a right rotation
RightRotation(node);
}
node.parent.color = 0;
node.parent.parent.color = 1;
//Perform a left rotation
LeftRotation(node.parent.parent);
}
}
else
{
temp = node.parent.parent.right; //uncle THIS VALUE IS NULL
System.out.println(node.parent.parent.right);
if(temp.color == 1)
{
temp.color = 0;
node.parent.color = 0;
node.parent.parent.color = 1;
node = node.parent.parent;
}
else
{
if(node.equals(node.parent.right))
{
node = node.parent;
LeftRotation(node);
}
node.parent.color = 0;
node.parent.parent.color = 1;
RightRotation(node.parent.parent);
}
}
if (node == root)
{
break;
}
}
root.color = 0;
}