<LeetCode天梯>Day032 对称二叉树(递归+迭代) | 初级算法 | Python

简介: <LeetCode天梯>Day032 对称二叉树(递归+迭代) | 初级算法 | Python

以下为我的天梯积分规则:


每日至少一题:一题积分+10分

若多做了一题(或多一种方法解答),则当日积分+20分(+10+10)

若做了三道以上,则从第三题开始算+20分(如:做了三道题则积分-10+10+20=40;做了四道题则积分–10+10+20+20=60)


初始分为100分

若差一天没做题,则扣积分-10分(周六、周日除外注:休息)

坚持!!!


初级算法

刷题目录

链表


image.png

image.png

题干

给定一个二叉树,检查它是否是镜像对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

image.png

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

image.png

递归

分析:

对称,镜像。我们能想到,将左右进行比对,对不对?

如果左子树和右子树不相等,直接返回Fasle;否则:说明是相等的。且结构如下图一样,不能和上面那样缺一半

我们考虑下空的情况,也是属于对称的。

递归走起!

image.png

class Solution:
    def isSymmetric(self, root: TreeNode) -> bool:
        # 设置出口
        if root == None:
            return True
        return self.isSymmetricHelper(left=root.left, right=root.right)
    def isSymmetricHelper(self, left:TreeNode, right:TreeNode) -> bool:
        # 如果左右子节点都是空,说明当前节点是叶子节点,返回True
        if left == None and right == None:
            return True
        # 如果当前节点只有一个子节点或者两个,但两个值不相同,则False
        if left == None or right == None or left.val != right.val:
            return False
        # 左子节点和右子节点的右子节点比较,左的右和右的做比较
        return self.isSymmetricHelper(left.left, right.right) and self.isSymmetricHelper(left.right, right.left)

最近递归用的比较多,多多理解。

image.png


相关文章
|
3天前
|
搜索推荐 Python
快速排序:Python 中的速度之王,揭秘它的递归魔法与性能极限!
【7月更文挑战第12天】快速排序**是高效排序算法,基于分治策略。它选择基准值,将数组分成小于和大于基准的两部分,递归地对两部分排序。
|
10天前
|
算法
刷算法Leetcode---9(二叉树篇Ⅲ)
刷算法Leetcode---9(二叉树篇Ⅲ)
11 3
|
19天前
|
分布式计算 算法 Python
Python函数进阶:四大高阶函数、匿名函数、枚举、拉链与递归详解
Python函数进阶:四大高阶函数、匿名函数、枚举、拉链与递归详解
|
17天前
|
存储 算法 搜索推荐
力扣每日一题 6/13 反悔贪心算法
力扣每日一题 6/13 反悔贪心算法
10 1
|
5天前
|
Python
打印9*9乘法表(递归或压缩矩阵)python
打印9*9乘法表(递归或压缩矩阵)python
|
28天前
|
算法 Java
[Java·算法·简单] LeetCode 283. 移动零
[Java·算法·简单] LeetCode 283. 移动零
23 2
|
28天前
|
算法 Java
[Java·算法·中等] LeetCode21. 合并两个有序链表
[Java·算法·中等] LeetCode21. 合并两个有序链表
18 2
|
算法 Python
leetcode-python经典题之一(二)
leetcode-python经典题之一(二)
leetcode-python经典题之一(二)
leetcode-python经典题之一
leetcode-python经典题之一
leetcode-python经典题之一
|
6天前
|
安全 Python
告别低效编程!Python线程与进程并发技术详解,让你的代码飞起来!
【7月更文挑战第9天】Python并发编程提升效率:**理解并发与并行,线程借助`threading`模块处理IO密集型任务,受限于GIL;进程用`multiprocessing`实现并行,绕过GIL限制。示例展示线程和进程创建及同步。选择合适模型,注意线程安全,利用多核,优化性能,实现高效并发编程。
20 3