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 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
最开始写代码的时候,我漏了下面这部分的代码:
这个代码还有第二个问题就是:返回逻辑过于复杂,怎么写了这么繁琐的返回值,说明代码的逻辑性不强。