【LeetCode 101】对称二叉树

1. 题目

2. 分析

这道题比较经典。我又一次做错了,这次是花了20min都没有做出来。

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

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

3. 代码

3.1 错误版

python 复制代码
# 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 False

        if l.right and r.left:
            if l.right.val == r.left.val:
                return self.dfs(l.right, r.left) 
            return False

        if l.left is None and r.right is None:
            return True
        if l.right is None and r.left is None:
            return True
        return False

最开始写代码的时候,我漏了下面这部分的代码:

这个代码还有第二个问题就是:返回逻辑过于复杂,怎么写了这么繁琐的返回值,说明代码的逻辑性不强。

3.2 正确版

相关推荐
轻抚酸~20 小时前
KNN(K近邻算法)-python实现
python·算法·近邻算法
Yue丶越1 天前
【C语言】字符函数和字符串函数
c语言·开发语言·算法
小白程序员成长日记1 天前
2025.11.24 力扣每日一题
算法·leetcode·职场和发展
有一个好名字1 天前
LeetCode跳跃游戏:思路与题解全解析
算法·leetcode·游戏
AndrewHZ1 天前
【图像处理基石】如何在图像中提取出基本形状,比如圆形,椭圆,方形等等?
图像处理·python·算法·计算机视觉·cv·形状提取
蓝牙先生1 天前
简易TCP C/S通信
c语言·tcp/ip·算法
2501_941870561 天前
Python在高并发微服务数据同步与分布式事务处理中的实践与优化
leetcode
2501_941147711 天前
高并发微服务架构Spring Cloud与Dubbo在互联网优化实践经验分享
leetcode
稚辉君.MCA_P8_Java1 天前
Gemini永久会员 Java中的四边形不等式优化
java·后端·算法
稚辉君.MCA_P8_Java1 天前
通义 插入排序(Insertion Sort)
数据结构·后端·算法·架构·排序算法