力扣226.翻转二叉树(中序遍历)

代码随想录说,这个题如果用递归,前序后序遍历都可以,但是中序遍历很容易出错,我最开始一直没想出来,中序遍历为什么会出错呢?不就是左右孩子的位置换一下吗?
直到我看了代码,就明白了。代码如下:

class Solution {
    public TreeNode invertTree(TreeNode root) {
        if(root == null) return null;
        invertTree(root.left);//注意这里是left
        TreeNode temp = root.left;
        root.left = root.right;
        root.right = temp;
        invertTree(root.left);//这里还是left
        return root;
    }
}

注意两个递归调用的参数都是root.left, 因为在第二步是交换root的左右孩子,所以在第三步要处理的右孩子其实已经变成了root的左孩子,是不是很有趣?
这个题目很简单,但是确实会稀里糊涂地通过,没搞清楚是树的哪一种遍历,看了代码随想录的解析感觉还挺惊喜的。
代码随想录的链接贴在这里:
代码随想录_翻转二叉树

你可能感兴趣的:(leetcode,算法,深度优先)