题目
操作给定的二叉树,将其变换为源二叉树的镜像。
二叉树的镜像定义:源二叉树
8
/ \
6 10
/ \ / \
5 7 9 11
镜像二叉树
8
/ \
10 6
/ \ / \
11 9 7 5
分析
递归交换左右子树即可
1、root == null
直接返回
2、没有左右子树时就不用继续进行root.left == null && root.right == null
3、左右子树至少有一个存在
- 左右子树都不为空则交换左右子树
- 左子树为空右子树不为空则把右子树挂到左子树然后把右子树置为空即可
- 右子树为空左子树不为空则把左子树挂到右子树然后把左子树置为空即可
代码
public void Mirror(TreeNode root) {
if (root == null||(root.left == null && root.right == null)) return;
if (root.right != null && root.left != null) {//左右子树都不为空则交换左右子树
TreeNode node = null;
node = root.right;
root.right = root.left;
root.left = node;
} else if (root.right != null && root.left == null) {//左边为空,右边不为空
root.left = root.right;
root.right = null;
} else {//左边为空,右边不为空
root.right = root.left;
root.left = null;
}
if(root.left!=null)Mirror(root.left);
if(root.right!=null)Mirror(root.right);
}