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

相关推荐
微露清风13 分钟前
快速排序算法学习记录
学习·算法·排序算法
梓䈑6 小时前
【算法题攻略】BFS 解决FloodFill 算法、最短路问题、多源BFS 和 拓扑排序
c++·算法·宽度优先
Adios7948 小时前
设置交集大小至少为2
数据结构·算法·leetcode
来一碗刘肉面14 小时前
栈的应用(表达式求值)
数据结构·算法
xiaowang1234shs15 小时前
怪兽轻断食技术深度测评:从断食计时引擎到AI识别算法的工程实践解析
数据库·人工智能·算法·macos·机器学习·p2p·visual studio
小果因子实验室15 小时前
量化研究--策略迁移算法1研究
算法
Web极客码16 小时前
如何用三段式确定性剪枝,为 LLM Agent 砍掉 35% 的 Token 成本?
服务器·人工智能·算法·机器学习
程序猿乐锅16 小时前
【数据结构与算法 | 第六篇】力扣1109,1094差分数组
java·算法·leetcode
wabs66617 小时前
关于图论【广度优先搜索的理论基础】
算法·图论·宽度优先