【剑指offer】27. 二叉树的镜像

题目描述

【剑指offer】27. 二叉树的镜像_第1张图片
【剑指offer】27. 二叉树的镜像_第2张图片

// 力扣
// 请完成一个函数,输入一个二叉树,该函数输出它的镜像。


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

题解

// 递归一定要按照函数的语义来递归,往往不需要知道递归细节
// 递归到最后总是会需要解决问题的基本单元,在这道题目中,
// 问题的基本单元就是交换一个根结点的左结点(假设是叶结点吧)和右结点

// 力扣
// 执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
// 内存消耗:35.7 MB, 在所有 Java 提交中击败了82.58%的用户
class Solution {
    // 解题函数:使输入二叉树root镜像翻转
	// 遍历按照前序遍历的顺序,先对当前结点使用swap,
	// 然后在左子树递归镜像翻转函数mirrorTree,
	// 最后在右子树递归镜像翻转函数mirrorTree
    public TreeNode mirrorTree(TreeNode root) {
        if (root == null)
            return null;
        swap(root);  // 
        mirrorTree(root.left);
        mirrorTree(root.right);
        return root;
    }

	// 交换函数:仅对当前根结点A的左子树与右子树交换一次位置
    private TreeNode swap(TreeNode A) {
        TreeNode temp = A.left;
        A.left = A.right;
        A.right = temp;
        return A;
    }
}
// 牛客
// 运行时间:15ms
// 占用内存:9836k
public class Solution {
    public void Mirror(TreeNode root) {
        if (root == null)
            return;
        root = swap(root);
        Mirror(root.left);
        Mirror(root.right);
    }
    
    private TreeNode swap(TreeNode A) {
        TreeNode temp = A.left;
        A.left = A.right;
        A.right = temp;
        return A;
    }
}

你可能感兴趣的:(剑指offer,leetcode,数据结构,二叉树,算法,面试)