【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 正确版

相关推荐
hetao17338374 分钟前
2025-12-21~22 hetao1733837的刷题笔记
c++·笔记·算法
醒过来摸鱼32 分钟前
递归三种分类方法
算法
炽烈小老头1 小时前
【每天学习一点算法 2025/12/22】将有序数组转换为二叉搜索树
学习·算法
jghhh011 小时前
POCS(凸集投影)算法解决部分k空间数据缺失导致吉布斯伪影
算法
罗湖老棍子1 小时前
最小函数值(minval)(信息学奥赛一本通- P1370)
数据结构·c++·算法··优先队列·
LYFlied1 小时前
【每日算法】LeetCode 4. 寻找两个正序数组的中位数
算法·leetcode·面试·职场和发展
长安er1 小时前
LeetCode 62/64/5/1143多维动态规划核心题型总结
算法·leetcode·mybatis·动态规划
鹿角片ljp1 小时前
力扣 83: 删除排序链表中的重复元素(Java实现)
java·leetcode·链表
LYFlied1 小时前
【每日算法】LeetCode 208. 实现 Trie (前缀树)
数据结构·算法·leetcode·面试·职场和发展
代码游侠2 小时前
应用——MPlayer 媒体播放器系统代码详解
linux·运维·笔记·学习·算法