镜像二叉树|刷题打卡

360 阅读1分钟

掘金团队号上线,助你 Offer 临门! 点击 查看详情

一、题目描述

请完成一个函数,输入一个二叉树,该函数输出它的镜像。

示例:

现有矩阵 matrix 如下:

     4
   /   \
  2     7
 / \   / \
1   3 6   9

镜像输出:

     4
   /   \
  7     2
 / \   / \
9   6 3   1

程序输出实例:

输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]

限制:

0 <= 节点个数 <= 1000

二、思路分析

我的思路

交换一下root下的左子树和右子树即可,然后递归左子树和右子树不断的进行交换。主要注意点就是:左子树为空,或者右子树为空就不要在递归了,只递归有分支的那一个端。

最佳思路

题解的思路大致和和我考虑的差不多,另外还有一种方式是借助栈来解决,因为本质是递归的问题,所以使用栈的思想也是一样的。

三、AC 代码

public TreeNode mirrorTree(TreeNode root) {
    // 首先考虑边界条件
  	if (root == null || root.right == null && root.left == null) {
        return root;
    }
  	// 从根做一次交换
    TreeNode tmp = root.left;
    root.left = root.right;
    root.right = tmp;
  	// 如果右子树或者左子树不为空,那么可以认为其实一个新的树,继续交换他们的左子树和右子树
    if (root.right != null) {
        mirrorTree(root.right);
    }
    if (root.left != null) {
        mirrorTree(root.left);
    }
    return root;
}

四、总结

很简单的一道题目,只要理解递归思想,再把握好一些边界情况应该没什么问题,解题思路还是比较唯一的。