《剑指Offer》Java刷题 NO.18 二叉树的镜像

《剑指Offer》Java刷题 NO.18 二叉树的镜像(二叉树镜像、递归)

时间:2020-02-27 题目: 操作给定的二叉树,将其变换为源二叉树的镜像。


思路: 很明显镜像二叉树是原二叉树一层一层的进行左右子树交换得来的,直到叶子结点;要注意的是,就算左右子树中有一个是空的也需要交换 递归过程:

    把左右子树交换,然后递归的把左子树和右子树都搞成镜像二叉树; 结束条件就是当前根结点为null

Java代码:

class TreeNode {
          
   
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int x) {
          
   
        val = x;
    }

    TreeNode() {
          
   

    }
}
/**
 * 操作给定的二叉树,将其变换为源二叉树的镜像。
 */
public class MirrorTree {
          
   
    public static void mirrorTree(TreeNode root){
          
   
        if(root==null) return;
        TreeNode temp=root.left;
        root.left=root.right;
        root.right=temp;//一定要交换结点才是交换了左右子树,如果仅仅是交换的val的话,底下的结构不会跟着改变
        if(root.left!=null)
            mirrorTree(root.left);
        if(root.right!=null)
            mirrorTree(root.right);
        //如果没有这两个判断语句的话,就算某个子树的根结点已经是null了,也还是会再执行一次函数
        //虽然直接return了,也尽力了压栈和出栈,比较两者的空间和时间消耗,还是判断一下吧
    }
}
经验分享 程序员 微信小程序 职场和发展