剑指 Offer 27. 二叉树的镜像
题目描述:
请完成一个函数,输入一个二叉树,该函数输出它的镜像。
例如输入:
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
思路
题目要求我们输出给定二叉树的镜像,二叉树的镜像即为将原本的左子树和右子树左右调换,并且子树的子树也要左右交换
那么,我们可设置一个新的节点head,同时遍历原二叉树,如果原二叉树有一个右节点,那么head就新建一个左节点,并将这个节点等于原二叉树的右节点,同时将该节点接入递归;如果原二叉树有一个左节点,同理。经过遍历,我们就可以得到二叉树的镜像
时间复杂度:O(n)
空间复杂度:O(n)
代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
TreeNode head;
public TreeNode mirrorTree(TreeNode root) {
if (root == null) return null;
head = new TreeNode(root.val);
su(root, head);
return head;
}
void su(TreeNode x, TreeNode y){
if (x.left != null){
y.right = new TreeNode(x.left.val);
su(x.left, y.right);
}
if (x.right != null){
y.left = new TreeNode(x.right.val);
su(x.right, y.left);
}
}
}