📃个人主页: 不断前进的皮卡丘
🌞博客描述: 梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记
🔥网站推荐:千里之行,始于足下。每天坚持刷题,巩固所学知识,也为将来找工作,面试做好准备----- 刷题神器
学习算法,还有一些知识的时候,有时候看书后以为自己懂了,结果做题就发现自己没什么思路,为此,博主决定坚持刷题,这里给大家推荐一个适合大家做题复习,准备面试的网站点此进入,里面还有大量的面经,大家可以在面试之前去看看
我们可以看到里面根据不同知识层面分成对应的题库,算法也进行了对应的分类,十分的友好,接下来就开始今天的刷题之旅
描述
操作给定的二叉树,将其变换为源二叉树的镜像。
数据范围:二叉树的节点数 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️⃣如果根节点pRoot为空,返回空
2️⃣交换左右子树
3️⃣递归左子树
4️⃣递归右子树
5️⃣返回根节点
🔥利用栈来存放节点,然后交换左右节点
1、 当 pRoot为空时,直接返回 null ;
2、初始化: 栈(或队列),本文用栈stack ,并加入根节点 pRoot。
3、循环交换: 当栈 stack 为空时跳出;
- 3.1、出栈: 记为 node ;
- 3.2、添加子节点: 将 node 左和右子节点入栈;
- 3.3、交换: 交换 node 的左 / 右子节点。
4、返回值: 返回根节点 pRoot 。
图解来自牛客
上面那两种方法是我能够想出来的思路,如果大家想要看看其他的思路的话,我们可以在牛客的题解上面看到其他人的思路 和代码,大家具体的可以去看看,也可以在上面和大家一起交流探讨
相较于其他平台,他们的题单更和工作,大厂靠拢,不光有面试必刷的101到题目,还有大量大厂真题,内容也全程免费,相较于其它会员费结算的来说 非常的友好
牛客还支持ACM模式,没有练习过的一定要提前适应!像某团、某为,都要求自己处理输入输出,如果不提前练习会很吃亏的!
牛客的题解更新迭代也很快,讨论区也有技巧的分享,能帮你把所有盲点扫清楚,整体来说还是非常推荐去练习的~
希望大家可以和博主一起坚持下去,千里之行,始于足下,让我们一起卷进大厂🎉🎉🎉