• 剑指 Offer 27. 二叉树的镜像


    1、题目描述

    2、算法分类 ---- 搜索与回溯

    【搜索与回溯】是计算机解题中常用的算法,很多问题无法根据某种确定的计算法则来求解,可以利用搜索与回溯的技术求解。它的基本思想是:为了求得问题的解,先选择某一种可能情况向前探索,在探索过程中,一旦发现原来的选择是错误的,就退回一步重新选择,继续向前探索,如此反复进行,直至得到解或证明无解。

    3、代码实现--方法一【递归与回溯】

    • 终止条件: 当节点 root 为空时(即越过叶节点),则返回 null ;
    • 进行交换
    • 开启递归的递推模式;
    •          开启递归 左子节点 mirrorTree(root.left)
    •          开启递归 右子节点 mirrorTree(root.right) 
    • 返回值: 返回当前节点 root;
    1. class Solution {
    2. //方法一:
    3. public TreeNode mirrorTree(TreeNode root){
    4. if(root == null) return null;
    5. //进行交换
    6. TreeNode tempNode = root.left;
    7. root.left = root.right;
    8. root.right = tempNode;
    9. //进行递归
    10. mirrorTree(root.left);
    11. mirrorTree(root.right);
    12. return root;
    13. }
    14. }

    时间复杂度 O(N) : 其中 N 为二叉树的节点数量,建立二叉树镜像需要遍历树的所有节点,占用 O(N)时间。
    空间复杂度 O(N): 最差情况下(当二叉树退化为链表),递归时系统需使用 O(N)大小的栈空间。

    4、代码实现--方法二【辅助栈 / 队列】

    • 特例处理: 当 root 为空时,直接返回 null ;
    • 初始化: 栈(或队列),本文用栈,并加入根节点 root 。
    • 循环交换: 当栈 stack 为空时跳出;
    •         出栈: 记为 node ;
    •         添加子节点: 将 node左和右子节点入栈;
    •         交换: 交换 node 的左 / 右子节点。
    • 返回值: 返回根节点 root 。
    1. class Solution {
    2. public TreeNode mirrorTree(TreeNode root){
    3. if(root == null) return null;
    4. //镜像是反向输出,因此用的Stack栈模式
    5. Stack<TreeNode> stack = new Stack<TreeNode>();
    6. stack.push(root);
    7. while(!stack.isEmpty()){
    8. TreeNode node = stack.pop();
    9. if(node.left != null)
    10. stack.push(node.left);
    11. if(node.right != null)
    12. stack.push(node.right);
    13. //进行交换
    14. TreeNode tempNode = node.left;
    15. node.left = node.right;
    16. node.right = tempNode;
    17. }
    18. return root;
    19. }
    20. }

    时间复杂度 O(N) : 其中 N 为二叉树的节点数量,建立二叉树镜像需要遍历树的所有节点,占用 O(N)时间。
    空间复杂度 O(N) : 如下图所示,最差情况下,栈 stack 最多同时存储 (N+1​ / 2 )个节点,占用 O(N) 额外空间

  • 相关阅读:
    Mac下根目录和家目录的区别
    [计算机网络安全实验] TCP协议漏洞利用
    Quartz入门——定时任务动态添加修改及持久化与自动恢复
    JAVA进程高load问题排查思路
    Web3入门指南:从基础概念到实际应用
    CodeBlocks C++开发环境的配置及使用
    【接口协议】FPGA 驱动 VGA 显示实验(一)原理部分
    蒟蒻初学单片机的一丢丢笔记
    跨时钟域握手信号的实现(Verilog)
    机器学习笔记 十:基于神经网络算法的数据预测
  • 原文地址:https://blog.csdn.net/huihuiaiyangyang/article/details/125407090