剑指offer-18、⼆叉树的镜像

题⽬描述

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

⼆叉树的镜像定义:源⼆叉树

思路及解答

递归

采用后序遍历(左-右-根)的方式递归访问每个节点:

  1. 递归处理左子树
  2. 递归处理右子树
  3. 访问根节点并交换其左右子树
java 复制代码
public TreeNode mirrorTree(TreeNode root) {
    if (root == null) return null;
    // 先递归处理子树
    TreeNode left = mirrorTree(root.left);
    TreeNode right = mirrorTree(root.right);
    // 再交换左右子树
    root.left = right;
    root.right = left;
    return root;
}

或者采用前序遍历(根-左-右)的方式递归访问每个节点:

  1. 访问根节点并交换其左右子树
  2. 递归处理左子树
  3. 递归处理右子树
java 复制代码
public TreeNode mirrorTree(TreeNode root) {
    if (root == null) {
        return null;
    }
    // 交换左右子树
    TreeNode temp = root.left;
    root.left = root.right;
    root.right = temp;
    // 递归处理左右子树
    mirrorTree(root.left);
    mirrorTree(root.right);
    return root;
}
  • 时间复杂度:O(n),每个节点只被访问一次
  • 空间复杂度:O(h),h为树的高度,递归栈空间消耗

迭代

利用队列实现广度优先搜索(BFS):

  1. 将根节点加入队列
  2. 取出队首节点并交换其左右子树
  3. 将非空的左右子节点加入队列
  4. 重复直到队列为空
java 复制代码
public TreeNode mirrorTree(TreeNode root) {
    if (root == null) return null;
    Queue<TreeNode> queue = new LinkedList<>();
    queue.offer(root);
    while (!queue.isEmpty()) {
        TreeNode node = queue.poll();
        // 交换左右子树
        swap(node);
        // 将子节点加入队列
        if (node.left != null) queue.offer(node.left);
        if (node.right != null) queue.offer(node.right);
    }
    return root;
}

public void swap(TreeNode root) {
    TreeNode temp = root.left;
    root.left = root.right;
    root.right = temp;
}
  • 时间复杂度:O(n)
  • 空间复杂度:O(n),最坏情况下需要存储所有节点
相关推荐
毕设源码-朱学姐25 分钟前
【开题答辩全过程】以 爱心捐赠网站为例,包含答辩的问题和答案
java·eclipse
尘觉2 小时前
中秋节与 Spring Boot 的思考:一场开箱即用的团圆盛宴
java·spring boot·后端
Le1Yu3 小时前
2025-10-7学习笔记
java·笔记·学习
popoxf3 小时前
spring容器启动流程(反射视角)
java·后端·spring
AAA修煤气灶刘哥4 小时前
监控摄像头?不,我们管这个叫优雅的埋点艺术!
java·后端·spring cloud
寻星探路4 小时前
Java EE初阶启程记09---多线程案例(2)
java·开发语言·java-ee
武子康4 小时前
Java-141 深入浅出 MySQL Spring事务失效的常见场景与解决方案详解(3)
java·数据库·mysql·spring·性能优化·系统架构·事务
珹洺5 小时前
Java-Spring入门指南(十五)SpringMVC注解开发
java·spring·microsoft
小满、5 小时前
什么是Maven?关于 Maven 的坐标、依赖管理与 Web 项目构建
java·maven
半旧夜夏5 小时前
【设计模式】核心设计模式实战
java·spring boot·设计模式