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

leetcode 101.对称二叉树

思路一:这里作者用了前序遍历的方法,并对前序遍历稍作了修改,对这个树的左右子树进行遍历并用集合进行了存储(即使是遍历到空结点也需要向里面添加null),然后比较两个集合中的元素是否一一对应。如出现一个不对应的地方,就直接返回false。遍历结束,还是没有出现不对应的地方,就说明这是一个轴对称的树。

/*** 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 false;List list1=new ArrayList();qianxu1(root.left,list1);List list2=new ArrayList();qianxu2(root.right,list2);if(list1.size()!=list2.size())return false;int len=Math.max(list1.size(),list2.size());for(int i=0;i<len;i++){if(list1.get(i)!=list2.get(i)){return false;}}return true;}public void qianxu1(TreeNode t,List list){if(t==null){list.add("null");return;}else{list.add(t.val);qianxu1(t.left,list);qianxu1(t.right,list);}}public void qianxu2(TreeNode t,List list){if(t==null){list.add("null");return;}list.add(t.val);qianxu2(t.right,list);qianxu2(t.left,list);}
}

思路二:可以递归同时进行,依次指向两节点其中的一个结点的左子树,和另一个结点的右子树,判断其某节点的左子树和另一个结点的右子树的元素是不是相同。一开始作者有这个思路,但是因为空指针异常,放弃了这个做法,是因为作者觉得根结点是特殊的,最多只有两个儿子,不需要颠倒左右子树;但即使这样也可以这样写,顶多就是重复而已,对于下面的结点就不一样了,有自己的左子树右子树。

当时在写这种思路的时候,提前去判断当前结点的左子树和右子树的元素是否相同,这样就会导致不知道当前结点的左子树或者右子树是否存在,也就会抛出指针异常的问题。给我的教训就是,有指针的地方,必须首先判断当前指针的有无,不要提前去判断下一次递归的指针的元素。然后再去递归下面可能存在的指针,在下一次递归中判断这个可能存在的指针到底是不是存在,也就是写在递归函数最前面判断指针是不是null的部分判断。

/*** 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 false;return bianli(root,root);}public boolean bianli(TreeNode t1,TreeNode t2){if(t1==null&&t2==null)return true;if(t1==null||t2==null)return false;if(t1.val==t2.val){return bianli(t1.left,t2.right)&&bianli(t1.right,t2.left); }elsereturn false;}
}


http://www.mrgr.cn/news/23080.html

相关文章:

  • OpenCV-轮廓检测
  • 开放式耳机具备什么特点?2024排行前十的四款百元蓝牙耳机推荐
  • 深入探讨:为什么会出现 0.30000000000000004 以及如何避免浮点数精度问题
  • 猫咪浮毛有这么严重?你不知道的浮毛清理好物——宠物空气净化器
  • 基于IndexDB+md-editor-v3实现的简单的文章书写小系统
  • Python自动化测试面试题-Selenium篇
  • Pow(x, n)
  • 2024CCPC网络预选赛 I. 找行李 【DP】
  • yum源配置与静态配置地址
  • 【LabVIEW学习篇 - 22】:ActiveX
  • 2023中国研究生创新实践系列大赛“华为杯”第二十届中国研究生数学建模竞赛E题优秀论文-问题1
  • M1 Mac安装Homebrew
  • 企业品牌声量统计怎么做?有没有什么工具?
  • MTPA控制分析与推导
  • Redis Cluste使用 INCR 或 INCRBY 生成唯一 ID 时为什么不会重复原理解析
  • RabbitMQ 04 集群,用于提高系统性能
  • 高反差保留DetailTransfer测评
  • RuoYi-Vue若依框架-系统监控内定时任务的使用
  • [基于 Vue CLI 5 + Vue 3 + Ant Design Vue 3 搭建项目] 02 配置 nodejs 淘宝镜像仓库
  • Java后端面试题(微服务相关)(day12)