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

【LeetCode 101】对称二叉树

1. 题目

在这里插入图片描述

2. 分析

这道题比较经典。我又一次做错了,这次是花了20min都没有做出来。
最开始我的思想就是,递归比较左根节点的左子树和右根节点的右子树是否对称即可,然后觉得能解决问题了,便动手coding。哪知道,又碰到了如下的问题:(1)左根节点的右子树和右根节点的左子树也是需要判断对称的,我给遗漏了;(2)对于同时有多个条件需要判断的递归,该如何返回?

我反思了一下我做的不对的原因: (1)自己动脑思考的时候未能考虑全面,以为就是简单的递归题,哪知道越做越复杂了。

3. 代码

3.1 错误版

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def isSymmetric(self, root: Optional[TreeNode]) -> bool:return self.dfs(root, root)def dfs(self, l, r):        # 第一种情况满if l.left and r.right:if l.left.val == r.right.val:return self.dfs(l.left, r.right)else:return Falseif l.right and r.left:if l.right.val == r.left.val:return self.dfs(l.right, r.left) return Falseif l.left is None and r.right is None:return Trueif l.right is None and r.left is None:return Truereturn False

最开始写代码的时候,我漏了下面这部分的代码:
在这里插入图片描述
这个代码还有第二个问题就是:返回逻辑过于复杂,怎么写了这么繁琐的返回值,说明代码的逻辑性不强。

3.2 正确版

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def isSymmetric(self, root: Optional[TreeNode]) -> bool:return self.dfs(root, root)# lr left root# rr right rootdef dfs(self, lr, rr):if lr == rr == None:return True  # 需要判断这个节点 if not lr or not rr :return Falsereturn lr.val == rr.val and self.dfs(lr.left, rr.right) and self.dfs(lr.right, rr.left)

相关文章:

  • text2sql、nl2sql框架总结
  • Aurora 8b/10b协议(高速收发器十五)
  • 小程序简单版录音机
  • MyBatisPlus——入门到进阶
  • 网络安全领域六大顶级会议介绍:含会议介绍、会议地址及会议时间和截稿日期
  • 动态IP与静态IP的优缺点
  • 如何手撸一个java ioc框架
  • 数字智能数字人直播带货软件系统 实现真人形象的1:1克隆 前后端分离 带完整的安装代码包以及搭建教程
  • Hadoop文件存储格式
  • 乘船过河(ship)
  • C语言基础:字符串函数使用与剖析
  • Spring进阶技巧:利用AOP提前介入的巧妙实践
  • uniapp编辑或者添加之后使用navigationBack返回上一页时数据不能更新的问题处理。
  • 零拷贝技术
  • IPv4 和 IPv6 是什么意思?它们之间的区别都有哪些?
  • C学习-枚举(九)
  • Docker入门(二) - Dockerfile
  • ES6 学习笔记(一)let,const和解构赋值
  • java 多线程基础, 我觉得还是有必要看看的
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • MD5加密原理解析及OC版原理实现
  • PHP 小技巧
  • Vue--数据传输
  • WebSocket使用
  • 大数据与云计算学习:数据分析(二)
  • 面试遇到的一些题
  • 用Canvas画一棵二叉树
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 《天龙八部3D》Unity技术方案揭秘
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​渐进式Web应用PWA的未来
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #AngularJS#$sce.trustAsResourceUrl
  • #QT(TCP网络编程-服务端)
  • (02)Hive SQL编译成MapReduce任务的过程
  • (4.10~4.16)
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (四)Controller接口控制器详解(三)
  • (转)C#调用WebService 基础
  • (转)大型网站的系统架构
  • .NET NPOI导出Excel详解
  • .NET 中 GetProcess 相关方法的性能
  • .Net插件开发开源框架
  • .NET之C#编程:懒汉模式的终结,单例模式的正确打开方式
  • .NET中使用Protobuffer 实现序列化和反序列化
  • @Transactional 竟也能解决分布式事务?
  • [ MSF使用实例 ] 利用永恒之蓝(MS17-010)漏洞导致windows靶机蓝屏并获取靶机权限
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证