网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > Java >

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

时间:2025-08-05 09:00

人气:

作者:admin

标签:

导读:题⽬描述 操作给定的⼆叉树,将其变换为源⼆叉树的镜像。 ⼆叉树的镜像定义:源⼆叉树 思路及解答 递归 采用后序遍历(左-右-根)的方式递归访问每个节点: 递归处理左子树 递归...

题⽬描述

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

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

思路及解答

递归

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

  1. 递归处理左子树
  2. 递归处理右子树
  3. 访问根节点并交换其左右子树
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. 递归处理右子树
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. 重复直到队列为空
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),最坏情况下需要存储所有节点

本文来自在线网站:seven的菜鸟成长之路,作者:seven,转载请注明原文链接:www.seven97.top

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信