剑指offer-18 二叉树的镜像 -- Java实现

隐身守侯 提交于 2019-12-10 06:33:50

题目

操作给定的二叉树,将其变换为源二叉树的镜像。

分析

思路一:

采用前序遍历的方式,递归实现,在遍历的同时交换非叶子结点的左右子结点(子树)。

在这里插入图片描述

代码采用递归实现:

递归头(递归结束的标志):遍历到叶子结点。
递归体(执行递归的条件):遍历到的结点非空。
递归内容:交换左右子结点。

时间复杂度:o(N)
空间复杂度:o(N)

代码:

/**
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) {
        //输入结点root为null
        if(root==null) return;
        //如果当前结点为叶结点则不执行镜像操作
        if(root.left==null&&root.right==null) return;
        //交换结点
        TreeNode tmp = root.left;
        root.left = root.right;
        root.right = tmp;
        //递归交换其两子树。
        if(root.left!=null) Mirror(root.left);
        if(root.right!=null) Mirror(root.right);
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!