逆向树 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
已经被改变了。但是你只是用 left
和 right
.
基本上你应该写:
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
语句,然后你必须不使用原始树和新树中的节点。
所以我正在研究 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
已经被改变了。但是你只是用 left
和 right
.
基本上你应该写:
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
语句,然后你必须不使用原始树和新树中的节点。