That's a lot of code to try to make sense of, but this:
public static GridNode copy(GridNode a)
{
GridNode b = a;
return b;
} // end copy will be a shallow copy. In other words, b and a will refer to the same thing. Similarly, here,
// set leftChild
public void setLeftChild(GridNode newLeftChild)
{
leftChild = newLeftChild;
} // end setLeftChild It's difficult to tell, in the second case, whether or not the reference is okay, or a Bad Thang.
When you clone a new GridNode, you need to at least copy the state, not just refer to the source's state.
I also don't know why you're using getters and setters inside the class, where you have access. To me, that just obfuscates things.