掘金团队号上线,助你 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;
}
四、总结
很简单的一道题目,只要理解递归思想,再把握好一些边界情况应该没什么问题,解题思路还是比较唯一的。