每天一道LeetCode-----判断二叉树左右两边是否成镜像关系
Symmetric Tree
原题链接Symmetric Tree
判断给定的二叉树和自身是否成镜像关系
以二叉树根节点为中心做垂线,两边正好是相反的才叫镜像,以两个值为2的节点leftNode和rightNode为例
需要满足
- leftNode->val == rightNode->val;
- leftNode->left->val == rightNode->right->val;
- leftNode->right->val == rightNode->left->val;
当然,使用递归是比较方便的,从根节点开始向下,逐个比较,即如果满足leftNode->val == rightNode->val,那么,需要让他们的子节点也同样满足镜像规则,只需要递归
isSymmetric(leftNode->left, rightNode->right) &&
isSymmetric(leftNode->right, rightNode->left);
每次进入isSymmetric函数时,参数的两个节点都来自根节点的两边,所以可以判断是否是镜像
代码如下
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:bool isSymmetric(TreeNode* root) {return !root || isSymmetric(root->left, root->right); }
private:bool isSymmetric(TreeNode* leftNode, TreeNode* rightNode){if(!leftNode && !rightNode) return true;if((leftNode && !rightNode) || (!leftNOde && rightNode)) return false;if(leftNode->val != rightNode->val) return false;return isSymmetric(leftNode->left, rightNode->right) && isSymmetric(leftNode->right, rightNode->left);}
};
迭代法只是简单的用队列维护遍历到的节点,思路都一样
代码如下
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/class Solution {
public:bool isSymmetric(TreeNode* root) {if(!root) return true;queue<TreeNode*> lq, rq;lq.push(root->left);rq.push(root->right);while(!lq.empty() && !rq.empty()){TreeNode* leftNode = lq.front();TreeNode* rightNode = rq.front();lq.pop();rq.pop();if(!leftNode && !rightNode) continue;if((leftNode && !rightNode) || (!leftNode && rightNode)) return false;if(leftNode->val != rightNode->val) return false;lq.push(leftNode->left);rq.push(rightNode->right);lq.push(leftNode->right);rq.push(rightNode->left);}return lq.empty() && rq.empty();}
};
递归还是比较容易写出的,需要注意镜像是在根节点两边对称,而不是每个节点的左右子树对称,递归时传入的参数要注意
每天一道LeetCode-----判断二叉树左右两边是否成镜像关系相关推荐
- 二叉树层次遍历c语言_每日一道 LeetCode (23):二叉树的层次遍历 II
❝ 每天 3 分钟,走上算法的逆袭之路. ❞ 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub:https://github.com/meteor1993/LeetCode Gi ...
- LeetCode LCP 07. 传递信息 / NC111 最大数 / NC16 判断二叉树是否对称 / NC13 二叉树的最大深度
祝我党百年华诞生日快乐 LCP 07. 传递信息 2021.7.1 每日一题 题目描述 小朋友 A 在和 ta 的小伙伴们玩传信息游戏,游戏规则如下:有 n 名玩家,所有玩家编号分别为 0 - n-1 ...
- 【leetcode】二叉树与经典问题
文章目录 笔记 leetcode [114. 二叉树展开为链表](https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list ...
- 一天一道LeetCode(61-90)
一天一道LeetCode(61-90) 文章目录 一天一道LeetCode(61-90) 61.旋转链表 62.不同路径 63.不同路径 II 64.最小路径和 65.有效数字(未解决) 66.加一 ...
- 牛客题霸 [判断二叉树是否对称] C++题解/答案
[牛客题霸 [判断二叉树是否对称] C++题解/答案](https://www.nowcoder.com/practice/1b0b7f371eae4204bc4a7570c84c2de1?tpId= ...
- c++判断二叉树是否为二叉搜索树_原创 | 好端端的数据结构,为什么叫它SB树呢?...
点击上方蓝字,关注并星标,和我一起学技术. 大家好,今天给大家介绍一个很厉害的数据结构,它的名字就很厉害,叫SB树,业内大佬往往叫做傻叉树.这个真不是我框你们,而是它的英文缩写就叫SBT. SBT其实 ...
- atoi函数_每日一道 LeetCode (50):字符串转换整数 (atoi)
❝ 每天 3 分钟,走上算法的逆袭之路. ❞ 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub:https://github.com/meteor1993/LeetCode Gi ...
- c++两个数组对比去掉重复的元素_每日一道 LeetCode (8):删除排序数组中的重复项和移除元素...
❝ 每天 3 分钟,走上算法的逆袭之路. ❞ 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub:https://github.com/meteor1993/LeetCode Gi ...
- 力扣(LeetCode)236. 二叉树的最近公共祖先(C语言)
一.环境说明 本文是 LeetCode 236. 二叉树的最近公共祖先,使用c语言实现. 递归. 测试环境:Visual Studio 2019. 二.代码展示 精简代码: struct TreeNo ...
最新文章
- java可以调用python程序吗_我们可以从java调用python方法吗?
- 回顾2013 - 技术上
- DevOps笔记-02:DevOps与微服务之间是什么关系?
- 爬取股票信息(股票代码+价格)
- 基于 KubeVela 与 Kubernetes 打造“无限能力”的开放 PaaS
- 学习Struts--Chap02:Struts2框架各个功能模块和程序执行流程的介绍
- HDU-4793 Collision 计算几何 解方程
- leetcode74. 搜索二维矩阵 ,你见过吗
- 百度地图迁徙大数据_百度地图大数据:五一高速拥堵不似预期,广深成热门迁出入地...
- 排序——宇宙总统(洛谷 P1781)
- mssql 无法启动调试器 数据为空_Windows无法启动:如何利用PE拯救桌面重要数据?...
- Android学习总结(5)——9个非常有用的Andorid 程序片段
- 西南科技大学OJ题 数字转换成字符0613
- Python数据可视化三部曲之 Pyecharts 从上手到上头
- 基于stm32f103的俄罗斯方块游戏
- 简单几步解决ie打不开闪退的问题 亲测有效
- apicloud转uniapp_uni-app,wex5,APPcan,ApiCloud几款国内webapp开发框架的选型对比
- html5 圆圈扩散,CSS3地图动态实例代码(圆圈向外扩散)
- innerHTML用法
- R语言数据可视化教程(ggplot2)_绘制散点图
热门文章
- python最小值函数_Python3 min() 函数详解 获取多个参数或列表中的最小值
- Java黑皮书课后题第7章:*7.13(随机数选择器)编写一个方法,返回1到54之间的随机数,但不能是传递到实参中的数。指定如下方法头
- C语言学习之输入一个大于三的值判断是否为素数
- N*N匹马,N个赛道,求出最快N匹马的解法
- OpenCV C++ 02 - Create a Blank Image Display
- 爸爸我爱您(之十二)
- 有关“优秀工作流引擎”的评价
- ArcGIS Server 简介
- 牛客网(剑指offer) 第十九题 顺时针打印矩阵
- 操作系统实验报告11:ucore Lab 2