题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:
二叉树的镜像定义:源二叉树
8
/ \
6 10
/ \ / \
5 7 9 11
镜像二叉树
8
/ \
10 6
/ \ / \
11 9 7 5
时间限制:1秒 空间限制:32768K 热度指数:162203
解答:
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {//思路:仔细观察源二叉树可知:镜像二叉树实际上就是将源二叉树的每个节点的左右子树互换,如:先将根节点8的左右子树6和8以及他们的子节点互换,将已6为根节点
//的子树当成8的右子数,10作为8的左子树,然后对此时的左子树10来说,又将它的左右子树互换,9就变成了10的右节点,11变成10的左节点。。。。
public void Mirror(TreeNode root) {//按先序遍历的顺序来交换左右子树的指向
if (null == root || (root.left == null && root.right == null)) {
return;
}
TreeNode curNode = null;//用作左右子树交换的中间变量
curNode = root.right;//以下三步是左右子树互换
root.right = root.left;
root.left = curNode;
if (root.left != null) {//如果有左子树(为之前的右子数),进入左子树
Mirror(root.left);
}
if (root.right != null) {
Mirror(root.right);
}
}
}