题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:
二叉树的镜像定义:源二叉树
8
/ \
6 10
/ \ / \
5 7 9 11
镜像二叉树
8
/ \
10 6
/ \ / \
11 9 7 5
初步解题思路:镜像就是交换一个节点的左子树和右子树,只要遍历出所有节点,再交换他们的左右指针即可。 如何遍历,就可以使用树的前序遍历等来实现。只是需要注意一下判断条件!省去交换空左右子树。
进阶解题思路:核心内容与上述方法一样,只不过代码更简单。将两个函数压缩至一个函数,同时最后个步骤中加了两个判断,对于一些特殊的子树,能省去不必要的代码片段。
Java初步解题
/**
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) {
TreeNode dummyroot = root;
find(dummyroot);
}
public void find(TreeNode root){
if(root!=null )
if(!(root.left==null && root.right==null)){
TreeNode ex = root.left;
root.left = root.right;
root.right = ex;
find(root.left);
find(root.right);
}
}
}
Java进阶解题
public class Solution {
public void Mirror(TreeNode root) {
if(root == null)
return;
if(root.left == null && root.right == null)
return;
TreeNode pTemp = root.left;
root.left = root.right;
root.right = pTemp;
if(root.left != null)
Mirror(root.left);
if(root.right != null)
Mirror(root.right);
}
}