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

相关推荐
菜鸡中的奋斗鸡→挣扎鸡几秒前
滑动窗口 + 算法复习
数据结构·算法
Lenyiin9 分钟前
第146场双周赛:统计符合条件长度为3的子数组数目、统计异或值为给定值的路径数目、判断网格图能否被切割成块、唯一中间众数子序列 Ⅰ
c++·算法·leetcode·周赛·lenyiin
郭wes代码16 分钟前
Cmd命令大全(万字详细版)
python·算法·小程序
scan72431 分钟前
LILAC采样算法
人工智能·算法·机器学习
菌菌的快乐生活1 小时前
理解支持向量机
算法·机器学习·支持向量机
大山同学1 小时前
第三章线性判别函数(二)
线性代数·算法·机器学习
axxy20001 小时前
leetcode之hot100---240搜索二维矩阵II(C++)
数据结构·算法
黑客Ash1 小时前
安全算法基础(一)
算法·安全
AI莫大猫2 小时前
(6)YOLOv4算法基本原理以及和YOLOv3 的差异
算法·yolo
taoyong0012 小时前
代码随想录算法训练营第十一天-239.滑动窗口最大值
c++·算法