• [算法刷题笔记]二叉树练习(1)二叉树的镜像



    📃个人主页: 不断前进的皮卡丘
    🌞博客描述: 梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记
    🔥网站推荐:千里之行,始于足下。每天坚持刷题,巩固所学知识,也为将来找工作,面试做好准备----- 刷题神器

    🥪前言

    学习算法,还有一些知识的时候,有时候看书后以为自己懂了,结果做题就发现自己没什么思路,为此,博主决定坚持刷题,这里给大家推荐一个适合大家做题复习,准备面试的网站点此进入,里面还有大量的面经,大家可以在面试之前去看看
    在这里插入图片描述
    我们可以看到里面根据不同知识层面分成对应的题库,算法也进行了对应的分类,十分的友好,接下来就开始今天的刷题之旅

    🥪二叉树的镜像

    二叉树的镜像

    🌮🌮题目描述

    描述
    操作给定的二叉树,将其变换为源二叉树的镜像。
    数据范围:二叉树的节点数 0 \le n \le 10000≤n≤1000 , 二叉树每个节点的值 0\le val \le 10000≤val≤1000
    要求: 空间复杂度 O(n)O(n) 。本题也有原地操作,即空间复杂度 O(1)O(1) 的解法,时间复杂度 O(n)O(n)
    在这里插入图片描述
    在这里插入图片描述

    🌮🌮思路1

    🔥我们可以考虑递归遍历,交换每一个节点的左右孩子节点
    1️⃣如果根节点pRoot为空,返回空
    2️⃣交换左右子树
    3️⃣递归左子树
    4️⃣递归右子树
    5️⃣返回根节点
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    🌮🌮思路2

    🔥利用栈来存放节点,然后交换左右节点
    1、 当 pRoot为空时,直接返回 null ;
    2、初始化: 栈(或队列),本文用栈stack ,并加入根节点 pRoot。
    3、循环交换: 当栈 stack 为空时跳出;

    • 3.1、出栈: 记为 node ;
    • 3.2、添加子节点: 将 node 左和右子节点入栈;
    • 3.3、交换: 交换 node 的左 / 右子节点。

    4、返回值: 返回根节点 pRoot 。
    图解来自牛客
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    🥪总结

    上面那两种方法是我能够想出来的思路,如果大家想要看看其他的思路的话,我们可以在牛客的题解上面看到其他人的思路 和代码,大家具体的可以去看看,也可以在上面和大家一起交流探讨
    在这里插入图片描述
    相较于其他平台,他们的题单更和工作,大厂靠拢,不光有面试必刷的101到题目,还有大量大厂真题,内容也全程免费,相较于其它会员费结算的来说 非常的友好
    在这里插入图片描述
    牛客还支持ACM模式,没有练习过的一定要提前适应!像某团、某为,都要求自己处理输入输出,如果不提前练习会很吃亏的!
    牛客的题解更新迭代也很快,讨论区也有技巧的分享,能帮你把所有盲点扫清楚,整体来说还是非常推荐去练习的~
    希望大家可以和博主一起坚持下去,千里之行,始于足下,让我们一起卷进大厂🎉🎉🎉

  • 相关阅读:
    python数据分析(3)
    刷题记录(NC202589 魔法数字,NC235247 Sramoc问题)
    QCefView入门及环境配置
    Spring 配置使用介绍
    MyBatis 学习(一)之 MyBatis 概述
    [ACTF2020 新生赛]Exec
    API 接口:原理、设计与应用
    创新发展,科技制胜 | 云扩科技入选“2022中小企业智能化解决方案提供商TOP10”
    Ubuntu 22.04 防火墙设置和开放端口命令
    LeetCode 185 部门工资前三高的所有员工
  • 原文地址:https://blog.csdn.net/qq_52797170/article/details/125942727