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

力扣101.对称二叉树(java)

题目来源

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

代码1(递归)

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public boolean isSymmetric(TreeNode root) {if(root == null) return true;return isMirror(root.left,root.right);}//判断两是否对称private boolean isMirror(TreeNode left, TreeNode right) {if(left==null && right==null) return true;//只有一个为空if(left==null || right==null) return false;if(left.val != right.val) return false;// 左左与右右 左右与右左return isMirror(left.left,right.right) && isMirror(left.right,right.left);}
}

代码分析

两子树是否对称最小规模子问题就是: 

1. 左子树 与 右子树是否堆成

(对称:左子树与右子树是否都为空,两值是否都为空, 不对称:只有一值为空)

2. 左子树的左子树与 右子树的右子树  是否同时与  左子树的右子树与 右子树的左子树 均为对称

代码2(dfs迭代法)

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public boolean isSymmetric(TreeNode root) {if(root == null) return true;Stack<TreeNode> stack = new Stack<>();stack.push(root.right);stack.push(root.left);while(!stack.isEmpty()) {TreeNode node1 = stack.pop(); //左子树根结点TreeNode node2 = stack.pop(); //右if(node1==null && node2==null) continue;if(node1==null || node2==null || node1.val!=node2.val) return false;// if(node1==null || node2==null) return false;// if( node1.val!=node2.val) return false;//将......逆向入栈 : 左左与右右  左右与右左// 入栈就是为了 看两子树是否对称stack.push(node2.left);stack.push(node1.right);stack.push(node2.right);stack.push(node1.left);}return true;}
}

代码分析

这里的dfs,是双向深入的dfs。因为需要两子树进行比较。

代码3(bfs迭代法)

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public boolean isSymmetric(TreeNode root) {if(root == null) return true;Queue<TreeNode> queue = new LinkedList<>();queue.offer(root.left);queue.offer(root.right);while(!queue.isEmpty()) {TreeNode node1 = queue.poll();TreeNode node2 = queue.poll();if(node1==null && node2==null) continue;if(node1==null || node2==null || node1.val!=node2.val) return false;queue.offer(node1.left);queue.offer(node2.right);queue.offer(node1.right);queue.offer(node2.left);}return true;}
}

代码分析

类似dfs,只是逐层处理。

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

相关文章:

  • Spring Boot构建RESTful服务与Actuator监控
  • 【Spring Boot】深入浅出Spring Boot中的控制反转与依赖注入
  • 去年做那个网站致富商业网站在规划与设计时应着重考虑哪些因素
  • 苏州网站建设 凡仕臣网络台州自助建站公司
  • vscode json
  • 奥威BI:AI数据分析重塑客户体验的实战指南
  • 公司网站开发费摊销大连建设安全网站
  • 东莞教育网站建设浙江建设厅网站查询
  • 深圳公司网站设计企业虹口建设机械网站
  • Rust 所有权与借用机制深度剖析:原理、常见陷阱与实战优化
  • golang学习笔记:标准库encoding
  • Go语言实战教学:从一个混合定时任务调度器(Crontab)深入理解Go的并发、接口与工程哲学
  • 如何做原创小说网站广州商城网站制作网站
  • 让线程按指定顺序运行
  • 定制手机网站开发显示网站翻页代码
  • CoAlbum:多级缓存与性能对比
  • 【算法专题训练】27、树的层序遍历
  • 网站导入wordpress基层建设是哪个网站的
  • 第6章—手动移植创建STM32工程
  • Android Bluetooth 蓝牙通信
  • 简述一般网站开发方式广州三合一企业网站哪家好
  • 网站建设邀标函专业的外贸建站公司
  • C++ STL(标准模板库)深度解析:从基础到实践
  • 压缩与缓存调优实战指南:从0到1根治性能瓶颈(二)
  • Linux小课堂: SSH 配置文件详解之全局与局部 Config 文件的语义梳理与技术深化
  • 6-2〔O҉S҉C҉P҉ ◈ 研记〕❘ 客户端攻击▸利用WORD宏让客户端执行命令
  • 网站页面设计报价xampp做网站设置
  • 制作 网站 盈利怎么看网站到期时间
  • Qt6.10 | Qt Bluetooth 蓝牙
  • 网站自动化开发无极官方网站下载