【LeetCode】二叉树的镜像Java题解

这是我参与8月更文挑战的第12天,活动详情查看:8月更文挑战

题目描述

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

例如输入:

     4
   /   \
  2     7
 / \   / \
1   3 6   9
镜像输出:

     4
   /   \
  7     2
 / \   / \
9   6 3   1

 

示例 1:

输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

复制代码

思路分析

  • 二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分。
  • 在数据结构考察中,最基本的考察方式是树的遍历,包含前/中/后/层 序遍历。这种遍历题目,大家接触的比较多,解决题目一般比较顺利。
  • 还有一种需要建立树结构返回,这种题目相对较少,多加练习就能掌握好。
  • 解决树问题常见的思想是递归。程序调用自身的编程技巧称为递归(recursion)。
  • 使用递归思想解决问题的时候,需要注意以下两点。1. 注意递归的终止条件,防止无限递归。2.将当前层处理的问题最小化,明确问题。
  • 根据上述知识的铺垫,结合题目,镜像可以简单理解为左右子树调换位置。代码如下:

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode mirrorTree(TreeNode root) {
        if (root == null) {
            return root;
        }

        return buildTree(root);
    }

    public TreeNode buildTree(TreeNode node) {
        if (node == null) {
            return null;
        }

        TreeNode newNode = new TreeNode(node.val);
        newNode.left = buildTree(node.right);
        newNode.right = buildTree(node.left);

        return newNode;
    }
}
复制代码

image.png

总结

  • 上述算法时间复杂度是 O(n), 空间复杂度是O(n)
  • 树的题目,只要勤加练习,都可以掌握!
  • 坚持每日一题,加油!
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享