根据题意输出它的镜像--镜像就是 左变成右 右变成左
这里就应该是使用递归回溯了
1.先用一个变量将当前节点的左子树保存起来
2当前节点的左子树 =.当前节点的右子树
当前节点的右子树=变量存储
3.终止条件 当节点为空的时候 返回null
class Solution {
public TreeNode mirrorTree(TreeNode root) {
//终止条件
if(root==null ) return null;
//暂存节点的左子树
TreeNode tem=root.left;
//当前节点的左子树=当前节点的右子树
root.left=mirrorTree(root.right);
//当前节点的右子树=暂存的树
root.right=mirrorTree(tem);
//最后返回
return root;
}
}
2.剑指 Offer 28. 对称的二叉树 思路分析
代码判断是否对称---即这颗二叉树与它的镜像一样
我们都知道它的镜像就是 左变成右 右变成左---如果要使二叉树与它的镜像一样那么符合的条件是 :
左子树的左节点等于右子树的右节点 并且 左子树的右节点等于右子树的左节点
这样就要使用递归回溯了
我们先找终止条件
当左子树 或者右子树同时为空的时候 代表都递归完了 说明是对称的 返回真
当左子树或者右子树有一个为空 代表只有一边递归完毕 返回假
当左节点的值和右节点的值不相等的时候 就说明不是对称的 返回假
下面我们看代码
class Solution {
public boolean isSymmetric(TreeNode root) {
//当树为空 代表一定是对称的
if(root==null) return true;
return result (root.left,root.right);
}
public boolean result(TreeNode Left,TreeNode Right){
//如果树的左和右子树都遍历都最后了 代表对称直接返回真
if(Left==null&&Right==null) return true;
//如果树的左子树或者右子树有一方遍历完毕了或者是左和右的值不相等 代表不对称返回假
if(Left==null||Right==null||Left.val!=Right.val) return false;
//对称就是 左子树左跟右子树右相等 左子树的右跟右子树左相等
return result(Left.left,Right.right)&&result(Left.right,Right.left);
}
}



