I'm attempting to write a function to balance a red-black tree after inserting nodes into it, but I'm getting a null pointer exception. On line 156, when I assign temp to node.parent.parent.right, temp is null, meaning node.parent.parent.right is null. I'm not sure why. Would anyone be able to look at my code and try to help me figure out why this issue is occurring?
//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;
}