Вам нужно создавать новые узлы и заменять их при разборе. Вы пытаетесь использовать один объект TreeNode для этого, поэтому вы никогда не достигнете своего базового условия.
Чтобы лучше понять, пожалуйста, используйте симпатичный метод печати и вызовите его из этого метода и наблюдайте за изменениями на небольшом вводе.
public TreeNode invertTree(TreeNode root) {
if (root == null){
return root;
}
TreeNode right = invertTree(root.right);
TreeNode left = invertTree(root.left);
root.left = right;
root.right = left;
return root;
}
Инверсия дерева с root r и поддеревьев справа и слева - это дерево с root r, правое поддерево которого является обратным левому, а левое поддерево - обратное справа.