我正尝试像Java中那样反转二叉树:
class Solution {
TreeNode node;
public TreeNode invertTree(TreeNode root)
{
if(root == null)
return null;
node = root;
node.left = invertTree(root.right);
node.right = invertTree(root.left);
return node;
}
}
但是在运行此代码时,我遇到了stackoverflow错误。谁能解释为什么?
答案 0 :(得分:1)
您需要创建新节点并在解析时替换它们。您正在尝试使用一个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;
}
根为r且子树为左右的树的逆是根为r的树,其右子树为left的逆,而左子树为right的逆。
答案 1 :(得分:0)
在反转左子树和右子树之后,您也需要交换左节点和右节点,以制作反向二叉树。您只需要添加交换两个值的代码即可。
class Solution {
TreeNode node;
public TreeNode invertTree(TreeNode root)
{
if(root == null)
return root;
invertTree(root.left);
invertTree(root.right);
TreeNode temp=root.left;
root.left=root.right;
root.right=temp;
return node;
}
}