本文主要是介绍【LeetCode 101】对称二叉树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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 Falseif l.right and r.left:if l.right.val == r.left.val:return self.dfs(l.right, r.left) return Falseif l.left is None and r.right is None:return Trueif l.right is None and r.left is None:return Truereturn False
最开始写代码的时候,我漏了下面这部分的代码:
这个代码还有第二个问题就是:返回逻辑过于复杂,怎么写了这么繁琐的返回值,说明代码的逻辑性不强。
3.2 正确版
# 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)# lr left root# rr right rootdef dfs(self, lr, rr):if lr == rr == None:return True # 需要判断这个节点 if not lr or not rr :return Falsereturn lr.val == rr.val and self.dfs(lr.left, rr.right) and self.dfs(lr.right, rr.left)
这篇关于【LeetCode 101】对称二叉树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!