当前位置: 首页 > news >正文

对称二叉树、二叉树直径

101. 对称二叉树 - 力扣(LeetCode)

法一:递归。

对于两个对称位置的节点L和R(L在左子树,R在右子树),只有当L的左节点值==R的右节点值且L的右节点值==R的左节点值时,这棵二叉树才有可能对称。另外还需要特判一下nullptr的情况。

/*** 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 check(TreeNode*l,TreeNode*r){if(!l&&!r) return true;if(!l||!r) return false;return l->val==r->val&&check(l->left,r->right)&&check(l->right,r->left);}bool isSymmetric(TreeNode* root) {if(root&&root->left==nullptr&&root->right==nullptr) return true;return check(root->left,root->right);}
};

法二:迭代。如上文所说,对于对称位置的L、R,只有当...时才有可能对称,因此我们只需要将L的左节点与R的右节点匹配、L的右节点和R的左节点匹配。考虑使用队列,取出两次对头匹配即可。本质上还是层序遍历,只不过遍历到一个节点的同时也在遍历它对称位置的节点。

/*** 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==nullptr) return true;queue<TreeNode*>que;que.push(root->left);que.push(root->right);while(!que.empty()){TreeNode*lhs=que.front();que.pop();TreeNode*rhs=que.front();que.pop();if(lhs==nullptr&&rhs==nullptr)//有对称的可能{continue;}if(lhs==nullptr&&rhs!=nullptr) return false;if(rhs==nullptr&&lhs!=nullptr) return false;else if(lhs->val!=rhs->val) return false;que.push(lhs->left);que.push(rhs->right);que.push(lhs->right);que.push(rhs->left);}return true;}
};

http://www.dtcms.com/a/283544.html

相关文章:

  • 云测试提前定位和解决问题 萤火故事屋上架流程
  • LLM指纹底层技术——模型架构
  • IPD核心思想之一:业务与能力并重
  • 专业文档盖章软件,批量处理高效
  • Qt开发环境搭建指南:从零开始构建跨平台应用基石
  • MySQL InnoDB 存储引擎
  • 算法穿上隐身衣:数据交易中数据黑箱与算法透明性的法律义务边界
  • Kiro:亚马逊云发布,革命性AI编程工具!以“规范驱动开发“重塑软件构建范式!
  • 识别装甲板
  • C#语法基础总结(超级全面)(二)
  • 理解大模型的对话和检索能力
  • 车载诊断架构 --- 由于产线节拍引起的OEM EOL刷写问题
  • 标准化装配检测解决方案发布,可快速部署,换型仅需一分钟!
  • 多维傅里叶变换性质与计算
  • 权限隔离设计中实现字段级别的动态隐藏
  • [特殊字符]️ Snort 与 Suricata 入侵检测系统详解
  • Scratch竞赛题目
  • Python 多线程
  • Effective Python 第9条: 建议避免在for和while循环后使用else块
  • Scrapy无缝集成Splash:轻量级动态渲染爬虫终极解决方案
  • 轻量级消息总线实现 (C++)
  • 适用于高性能封装的TGV视觉检测方案
  • 版本更新 | 华望M-Design 4400版本功能更新详解(下篇)
  • [特殊字符] Electron 中的 `global` 变量
  • LVGL 列表表格控件颜色修改
  • 【时时三省】(C语言基础)通过指针引用多维数组2
  • oracle服务器定时备份Windows Server
  • 怎么用快鲸aiseo提升百度搜索排名?
  • 在 IntelliJ IDEA 中添加框架支持的解决方案(没有出现Add Framework Support)
  • 因果发现PCMCI 算法简述、Tigramite库的简单实践