使用全局变量反转二叉树时出现stackoverflow错误

时间:2020-03-30 19:00:24

标签: java tree stack-overflow

我正尝试像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错误。谁能解释为什么?

2 个答案:

答案 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;
    }
}
相关问题