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

对称二叉树、二叉树直径

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.xdnf.cn/news/15707.html

相关文章:

  • el-input 回显怎么用符号¥和变量拼接展示?
  • Golang 并发快速上手
  • (新手友好)MySQL学习笔记(完):事务和锁
  • 自学中医笔记(一)
  • NO.6数据结构树|二叉树|满二叉树|完全二叉树|顺序存储|链式存储|先序|中序|后序|层序遍历
  • MH32F103A单片机 可兼容替代STMCCT6/RCT6/RBT6,增强型
  • 【Android】TextView的使用
  • 大语言模型幻觉检测:语义熵揭秘
  • webpack将组件vue进行编译混淆,并能正常使用编译之后的文件
  • AR智能巡检:电力运维的数字化变革
  • Ansible 查看PostgreSQL的版本
  • 编译原理第四到五章(知识点学习/期末复习/笔试/面试)
  • 二重循环:输入行数,打印直角三角形和倒直角三角形
  • UE5 相机后处理材质与动态参数修改
  • 创建第二大脑的关键还是方法
  • xss-labs练习
  • Python+Selenium自动化
  • 创建linux端口映射连接小网
  • Vue2.x封装预览PDF组件
  • 观察者设计模式
  • 微服务引擎 MSE 及云原生 API 网关 2025 年 5 月产品动态
  • PXE实现Ubuntu,rockylinux,almalinux全自动安装
  • 第五届计算机科学与区块链国际学术会议(CCSB 2025)
  • MEF 在 WPF 中的简单应用
  • 多人协作游戏中,团队共同获取的装备如何确定按份共有或共同共有
  • 基于Llama的RAG 3种模型配置方法
  • Django REST Framework 入门指南:从 0 到 1 实现 RESTful API
  • Linux-局域网构建+VLAN 划分 + 端口 MAC-IP 绑定 + 静态 DHCP
  • Python 进阶学习之全栈开发学习路线
  • 如何删除 VSCode 账号的远程同步备份记录数据