逆向树 LeetCode

Inverse A Tree LeetCode

所以我正在研究 LeetCode 上的一个问题,我必须反转二叉树。

问题:

这是我的解决方案:

class Solution {
    public TreeNode invertTree(TreeNode root) {
        TreeNode newTree = root;
        return invertTreeHelper(root, newTree);
    }

    public TreeNode invertTreeHelper(TreeNode root, TreeNode newTree)
    {
       if(root == null)
           return null; 
        
       newTree.val = root.val;         
       newTree.left = invertTreeHelper(root.right, newTree.left); 
       newTree.right = invertTreeHelper(root.left, newTree.right); 
       return newTree; 
    }
}

给定的输入是:

[4,2,7,1,3,6,9]

我的预期输出是:

[4,7,2,9,6,3,1]

然而,我的输出是:

[4,7,7,9,6,6,9]

很明显,我的输出不适用于树的左侧。我想知道我哪里出错了。有人可以帮我解决这个问题吗?

newTree = root 意味着如果你现在改变 newTree.left 你也会改变 root.left,你没有真正的新树,你只是在适当的地方操纵一棵树。如果你想这样做,你必须小心不要覆盖你以后需要的东西。如果你想交换两个数字,你不能写 a=b; b=a; 因为在第二个赋值时 a 已经被改变了。但是你只是用 leftright.
基本上你应该写:

public void invertTree(TreeNode node) {
   if (node == null)
       return; 
    TreeNode tmp = node.left;
    node.left = node.right
    node.right = tmp;
    invertTree(node.left);
    invertTree(node.right);
}

或者你实际上可以创建一个新树然后你不需要担心 tmp 部分但是你需要在正确的地方有很多 new TreeNode 语句,然后你必须不使用原始树和新树中的节点。