leetcode101. 对称二叉树(两种做法)

在这里插入图片描述

一:题目

在这里插入图片描述
在这里插入图片描述

二:上码

方法一:队列

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:bool isSymmetric(TreeNode* root) {if(root == NULL) return true;queue<TreeNode*> q;q.push(root->left);q.push(root->right);while(!q.empty()){//注意这里我们不能   q.empty() != NULL  因为我们在队列中也装入了空指针//比较我们的装入队列的两个结点(指针)TreeNode* leftroot = q.front();q.pop();//访问完一个删除一个TreeNode* rightroot = q.front();q.pop();if(leftroot == NULL && rightroot == NULL)//递归到根节点的时候  直接跳过 去遍历下一组数据continue;if(leftroot == NULL && rightroot != NULL)return false;if(rightroot == NULL && leftroot != NULL)return false;if(rightroot != NULL && leftroot != NULL && (rightroot->val != leftroot->val))return false;//下面的意思就是 装入队列的结点的顺序  下次遍历 做准备q.push(leftroot->left);//装入左子树左节点q.push(rightroot->right);//装入右子树右结点q.push(leftroot->right);//装入左子树右节点q.push(rightroot->left);//装入右子树左节点    }return true;}
};

第二种方法 栈

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:bool isSymmetric(TreeNode* root) {/**思路:这里我们考虑用栈,我们首次入栈的时候,我们将根节点的左右孩子节点入栈然后我们就开始在while循环中,开始出栈比较,并且入栈的是(每个左节点的右孩子,右节点的左孩子)(每个左节点的左孩子,右节点的有孩子)我们通过出栈比较 如果有特殊情况  则返回fasle  否则就是true**/if(root == NULL) return false;stack<TreeNode*>st;st.push(root->left);//这里在push的时候不用考虑是否为NULL,因为我们需要比较两个节点st.push(root->right);while(!st.empty()) {TreeNode* rightNode = st.top(); st.pop();TreeNode* leftNode = st.top(); st.pop();if(!rightNode && !leftNode) {//如果左右节点为NULL的话,那就跳过,去比较下一组节点continue;}//那么接下来就是左节点为空,右节点不空//左节点不空,右节点为空//左右节点均不为空 但是数值不相等if((!rightNode || !leftNode || (rightNode->val != leftNode->val)))return false;st.push(leftNode->left);st.push(rightNode->right);st.push(leftNode->right);st.push(rightNode->left);}return true;}
};

在这里插入图片描述
其实还有递归的做法 emmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm 我看不懂 无奈 递归的码看起来是那么的小巧玲珑 但理解费劲 哎呀呀呀呀呀呀
递归要我命

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务架构下的测试策略

源宝导读&#xff1a;最近几年&#xff0c;微服务架构越来越火爆&#xff0c;逐渐被企业所采用。随着软件架构的变化&#xff0c;对应的软件测试策略需要作何调整呢&#xff1f;本文将介绍云客在微服务架构下的测试策略。一、云客测试策略模型策略分析行业内的测试策略是一个先…

leetcode222. 完全二叉树的节点个数(两种做法)

一&#xff1a;题目 二&#xff1a;今天不上菜 上码了 方法一&#xff1a;前序遍历 求解 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr)…

听红宝书译者谈Web视角下的前端开发

Web视角下的前端开发⏳序言⏰一、关于前端开发1. 起源、架构、变迁&#xff08;1&#xff09;起源&#xff08;2&#xff09;架构&#xff08;3&#xff09;变迁2. 前端应用的领域&#xff08;1&#xff09;所面向群体&#xff08;2&#xff09;所面向领域3. 语言、框架、工具4…

在家办公这半年,让我开始热爱生活

距离上次更新公众号已经过去一年多了&#xff0c;感觉自己成了“年更姚”。不过好在这个公众号的读者大多是同事朋友&#xff08;加起来也没有多少好么喂&#xff09;&#xff0c;本身对我也没用太高的期待吧。今天想聊聊远程工作这件事。不过我并不想聊团队成员之间如何远程协…

每天都在红绿灯前面梭行,不如自己来实现个红绿灯?

用js实现一个交通灯&#x1f507;前言&#x1f508;一、需求分析 - 交通灯&#x1f509;二、实现版本1. 版本一&#xff1a;简单粗暴版2. 版本二&#xff1a;数据抽象版3. 版本三&#xff1a;过程抽象版4. 版本四&#xff1a;命令式和声明式&#x1f50a;三、在线online&#x…

Git 常用操作 | 重写 commit 历史

当我们修改完代码&#xff0c;提交了一个 commit&#xff0c;然后发现改错了&#xff0c;怎么修正&#xff1f;这种情况分为两种&#xff1a;修正最近一次提交&#xff0c;和修正历史多个提交。修正最近一次提交如果发现刚刚提交的内容有错误&#xff0c;当场再修改一下再提交一…

leetcode257. 二叉树的所有路径(两种做法)

一:题目 二:上码 1&#xff1a;DFS /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), …

【LeetCode之C#解法】 移动零、爬楼梯

题目官网链接https://leetcode-cn.com/problems/move-zeroes/283. 移动零给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作&#xff0c;不能拷…

幂等问题 vs 如何判断是否是4的幂

判断是否是4的幂&#x1f939;序言&#x1f6b4;一、需求分析 - 判断是否是4的幂等&#x1f93e;二、实现版本1. 版本一&#xff1a;中规中矩法2. 版本二&#xff1a;按位与3. 版本三&#xff1a;按位与优化4. 版本四&#xff1a;正则匹配法⛹️三、结束语&#x1f93c;往期推荐…

leetcode404. 左叶子之和

一&#xff1a;题目 二:上码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(n…

切西瓜法实现微信抢红包功能

运用切西瓜法和栅栏法实现微信抢红包功能✅前言☑️一、需求分析 - 分红包问题&#x1f199;二、实现版本1. 版本一&#xff1a;切西瓜法2. 版本二&#xff1a;栅栏法✳️三、在线Online&#x1f197;四、结束语&#x1f19a;往期推荐✅前言 在现实生活中&#xff0c;非常常见…

如何给扑克洗牌才能更公平?

如何给扑克牌洗牌才能更显公平性&#x1f4fb;前言一、&#x1f399;️需求分析 - 洗牌问题二、&#x1f4bf;实现版本1. 版本一&#xff1a;常规思维2. 版本二&#xff1a;验证公平性3. 版本三&#xff1a;交换法则三、&#x1f4fa;在线Online四、&#x1f4f9;结束语&#x…

这些年我是怎么自学成架构师的(转自知乎)

近日在知乎上一则关于程序员能否“自学成才”的问题&#xff0c;引发了激烈的讨论&#xff01;各种各样的说法都有&#xff0c;最终变成程序员晒学习经历的帖子。作为十多年.NET技术老兵&#xff0c;纯自学成架构师&#xff0c;也来分享下观点&#xff1a;自学当然有效&#xf…

创新视角下的复盘 | 2021/08/01-2021/09/30

&#x1f5c2;️序言 七月份的时候第一次做月度复盘&#xff0c;发现如果只有每日计划&#xff0c;还是比较零散的。月度复盘可以更直观地看到自己的时间规划和及时纠正当下存在的一些问题。 在8-9月份中&#xff0c;有一半在暑假&#xff0c;一半开始于新学期。 &#x1f4…

TIOBE 9 月榜单:C#上涨1.18,Java 同比下滑3.18

喜欢就关注我们吧&#xff01;TIOBE 已公布 2020 年 9 月的编程语言排行榜。C 近期发展状态不错&#xff0c;依旧在榜单中排第四&#xff0c;但排名比率保持增长&#xff0c;本月为 7.11%。2003 年是 C 的巅峰时期&#xff0c;当年 8 月&#xff0c;它的 TIOBE 排名峰值为 17.5…

储存引擎InnoDB 索引选择 为何是B+树 而不是 B树 哈希表

一:概述 首先需要澄清的一点是&#xff0c;MySQL 跟 B 树没有直接的关系&#xff0c;真正与 B 树有关系的是 MySQL 的默认存储引擎 InnoDB&#xff0c;MySQL 中存储引擎的主要作用是负责数据的存储和提取&#xff0c;除了 InnoDB 之外&#xff0c;MySQL 中也支持 MyISAM 作为表…

初探react,用react实现一个todoList功能

初探react&#xff0c;用react实现一个todoList功能&#x1f6f0;️前言&#x1f680;一、react基础1. react简介2. 开发环境搭建3. 工程目录文件简介4. react中最基础的JSX语法&#x1f6f8;二、使用react编写TodoList功能1. 页面构思2. React中的响应式设计思想和事件绑定3. …

《五分钟商学院》个人篇学习总结(上)

【商业知识】| 作者 / Edison Zhou这是EdisonTalk的第285篇原创内容商业篇聚焦的是我们与外部的关系&#xff0c;管理篇聚焦的是我们与内部的关系&#xff0c;而个人篇聚焦的则是我们与自己的关系。与自己斗&#xff0c;其乐无穷&#xff0c;本文是个人篇的上半部分学习总结。本…

Git 实用操作 | 撤销 Commit 提交

有的时候&#xff0c;改完代码提交 commit 后发现写得实在太烂了&#xff0c;连自己的都看不下去&#xff0c;与其修改它还不如丢弃重写。怎么操作呢&#xff1f;使用 reset 撤销如果是最近提交的 commit 要丢弃重写可以用 reset 来操作。比如你刚写了一个 commit&#xff1a;写…

react只停留在表层?五大知识点带你梳理进阶知识

五大知识点带你梳理react进阶知识✉️前言&#x1f4e7;一、props1、PropTypes与DefaultProps应用&#xff08;1&#xff09;PropTypes&#xff08;2&#xff09;defaultProps2、props&#xff0c;state与render函数&#x1f4e8;二、React中的虚拟DOM1、什么是虚拟DOM&#xf…