剑指Offer:二叉树的镜像

题目

操作给定的二叉树,将其变换为源二叉树的镜像。

##输入描述:

1
2
3
4
5
6
7
8
9
10
11
12
二叉树的镜像定义:源二叉树 
8
/ \
6 10
/ \ / \
5 7 9 11
镜像二叉树
8
/ \
10 6
/ \ / \
11 9 7 5

分析

通过观察输入描述,我们可以看到这两棵树的根节点是相同的,但他们的左右子节点交换了位置。

因此,我们可以通过先序遍历这棵树的每个节点,如果遍历到的节点有子节点,就交换他的两个子节点,当交换完所有的非叶节点的左右子节点之后,就得到了树的镜像。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;

public TreeNode(int val) {
this.val = val;

}

}
*/
public class Solution {
public void Mirror(TreeNode root) {
if (root == null)
return ;
if (root.left == null && root.right == root)
return ;
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;

if (root.left != null)
Mirror(root.left);
if (root.right != null)
Mirror(root.right);
}
}