101. 对称二叉树

问题描述

https://leetcode.cn/problems/symmetric-tree/description/

解题思路

这个题,一看就是递归。既然如此,我们按照递归的一般思路来看,即问题的定义即为问题的解。

这个题目看似复杂,实际就是在求左子树的左孩子等于右子树的右孩子,左子树的右孩子等于右子树的左孩子。

我们给出了定义,那代码就迎刃而解了。

其实还有一种思路。我们可以把左子树或者右子树反转。反转之后判断左子树是否等于右子树即可。

代码一、纯递归定义

复制代码
# 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:
        if root is None:
            return True
        return self.is_same(root.left, root.right)
    
    def is_same(self, p, q):
        if p is None and q is None:
            return True
        if p is None or q is None:
            return False
        if p.val == q.val:
            return self.is_same(p.left, q.right) and self.is_same(p.right, q.left)
        return False
复制代码

 

代码二、反转后对比

复制代码
# 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:
        if root is None:
            return True
        self.reverse(root.right)
        return self.is_same(root.left, root.right)

    def is_same(self, p, q):
        if p is None and q is None:
            return True
        if p is None or q is None:
            return False
        if p.val == q.val:
            return self.is_same(p.left, q.left) and self.is_same(p.right, q.right)
        return False

    def reverse(self, root):
        if not root:
            return
        root.left, root.right = root.right, root.left
        self.reverse(root.left)
        self.reverse(root.right)
复制代码

 

posted @   BJFU-VTH  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示