[Leetcode] 相同的树、对称二叉树

news2025/1/14 18:10:09

相同的树和对称二叉树都可以使用递归实现。

    • 相同的树

题目链接:https://leetcode.cn/problems/same-tree/solution/xiang-tong-de-shu-by-leetcode-solution/

1.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 isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:
        if not p and not q:
            return True
        elif not p or not q:
            return False
        elif p.val != q.val:
            return False
        else:
            return self.isSameTree(p.left,q.left) and self.isSameTree(p.right,q.right)

1.2.队列、广度优先搜索

使用两个队列分别存储两个二叉树的节点。初始时将两个二叉树的根节点分别加入两个队列。

当队列两个队列都不为空时,进行如下循环:

从两个队列头各取出一个节点进行比较:

如果两个节点的值不相同 return False

判断两个节点的子节点是否为空,如果只有一个节点的左子节点(或右子节点)为空 return False

将两个节点的非空子节点分别加入两个队列,进行下一次循环

如果搜索结束时两个队列同时为空,则两个二叉树相同;如果只有一个队列为空 return False

class Solution:
    def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
        if not p and not q:
            return True
        if not p or not q:
            return False
        
        queue1 = [p]
        queue2 = [q]

        while queue1 and queue2:
            node1 = queue1.pop(0)
            node2 = queue2.pop(0)
            if node1.val != node2.val:
                return False
            left1, right1 = node1.left, node1.right
            left2, right2 = node2.left, node2.right
            if (not left1) ^ (not left2):
                return False
            if (not right1) ^ (not right2):
                return False
            if left1:
                queue1.append(left1)
            if right1:
                queue1.append(right1)
            if left2:
                queue2.append(left2)
            if right2:
                queue2.append(right2)
        return not queue1 and not queue2

2.对称二叉树

给你一个二叉树的根节点 root , 检查它是否轴对称。

题目链接: https://leetcode.cn/problems/symmetric-tree/

使用递归,定义一个比较左右子树是否对称的函数,输入为两个节点(比如左子节点和右子节点)

将问题转换为 --> 比较左右子节点的值是否相同 + 比较树的外侧和内侧是否分别对称,即左子节点的左子树和右子节点的右子树是否对称 以及 左子节点的右子树和右子节点的左子树是否对称

class Solution:
    def isSymmetric(self, root: Optional[TreeNode]) -> bool:

        def twonodeSymmetric(p,q):
            if not p and not q:
                return True
            elif not p or not q:
                return False
            elif p.val != q.val:
                return False
            else:
                return twonodeSymmetric(p.left,q.right) and twonodeSymmetric(p.right,q.left)

        if not root:
            return True
        else:
            return twonodeSymmetric(root.left,root.right)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/145506.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

以前不知道字节面试难在哪,现在体验到了,被虐的很惨...

人们都说,互联网寒冬来了,这个时候还在大面积招人的公司,必然是牛逼的公司。而这个时候勇敢跳槽的人,必然是牛逼的人。于是我开始了字节跳动的社招面试。 为了这天,我前一天排老长的队,理了个利落的发型&a…

蚂蚁帮路由器Antbang A3s V2.0刷入OpenWrt/LEDE

参考资料路由器基本常识_冰色阳光的博客-CSDN博客_路由器bootloader是什么https://www.right.com.cn/forum/thread-3191610-1-1.html已知问题刷入OpenWrt/LEDE后,似乎路由器的Reset键不起作用。路由器在启动时,正常会先运行引导程序Breed,然后…

LinuxC—文件系统学习笔记

文件系统 1 目录和文件 1.1 获取文件属性信息stat 相关函数 stat() 得到file指向的文件并将其属性回填到buf中,面对符号链接文件时获取的是所指向的目标文件的属性 /* Get file attributes for FILE and put them in BUF. */ extern int stat (const char *__res…

Jetson nano 入手系列之5—远程可视化访问:jupyter lab与VNC连接

Jetson nano 入手系列之5—远程可视化访问:jupyter lab与VNC1. jupyter lab1.1 安装jupyter lab1.2 配置jupyter_lab1.3 打开jupyter lab1.3.1 ip地址方式打开1.3.2 cmd中ssh方式打开2. vino与VNC Viewer2.1 vino的安装2.2 Desktop Sharing配置与设置2.3 启动vino s…

ICG-DBCO;吲哚菁绿-二苯基环辛炔,荧光染料标记DBCO

中文名:吲哚菁绿-二苯基环辛炔 英文名:ICG-DBCO,ICG-Dibenzocyclooctyne 分子式: C63H64N4O5S 分子量: 989.27 g/mol 外观:绿色粉末 激发发射波长:785/821nm 结构式: ​ 溶解度:有机溶剂/水 储藏方法…

使用无人机 LiDAR 的重叠树冠的新型植被点云密度树分割模型

Paper题目:A Novel Vegetation Point Cloud Density Tree-Segmentation Model for Overlapping Crowns Using UAV LiDAR Abstract 由于常用的冠层高度模型(CHM)的局限性,在具有高密度和重叠树冠的森林生态系统中检测和分割单个树木经常会导致偏差。针对…

Flink 第3章 反压策略

概述Flink 中文网站的讲解https://flink-learning.org.cn/article/detail/138316d1556f8f9d34e517d04d670626涉及内容:网络流控的概念与背景TCP的流控机制Flink TCP-based 反压机制 1.5之前Flink Credit-based 反压机制 1.5及以后总结与思考网络流控的概念与背景为什…

AtCoder Beginner Contest 283 E - Don‘t Isolate Elements

E - Dont Isolate Elements (atcoder.jp)题意:题意:定义孤独的数为,该数上下左右的数都和它相反给定一个01矩阵,每次操作可以把某一行的数取反,问你把该矩阵变成没有孤独的数的最少操作次数是多少思路:一开…

AI降噪的N种数据扩增方法

数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已 基于统计信号处理的传统噪声抑制方法是通过检测持续的背景声,来估计背景噪声,然后通过估计到的背景噪声计算增益因子对带噪语音进行抑制。但这种方式针对规律的稳态噪声比较…

【算法笔记】最近公共祖先(LCA)算法详解

0. 前言 最近公共祖先简称 LCA(Lowest Common Ancestor)。两个节点的最近公共祖先,就是这两个点的公共祖先里面,离根最远的那个。 这种算法应用很广泛,可以很容易解决树上最短路等问题。 为了方便,我们记…

企业内训方案|领导力与执行力/TTT内训师/管理者情商修炼

企业内训方案|领导力与执行力/TTT内训师/管理者情商修炼 》》领导力与执行力 从精兵到强将 高绩效团队协作与跨部门沟通 核心人才的管理与激励 卓越管理者的胜任力提升 MTP中层管理技能提升训练 打造高绩效团队 高效沟通技巧 高绩效团队管理(中高层/中基层&#xf…

CRM帮助企业实现销售自动化

随着互联网技术的发展,各家企业都善用互联网优势发布各种信息,导致潜在客户被各种推销信息所淹没,销售周期延长,企业可以借助CRM有效规范销售流程,帮助企业实现销售自动化。 前言 各行各业的业务流程中似乎都少不了销…

OSPF综合实验(1.5)

目标: 1、首先进行基于172.16.0.0/16的ip地址规划 首先题中有5个区域和一个RIP共需要5个网段 可以借3位划分为8个网段 172.16.0.0/19 area 0 然后将172.16.0.0/19再借6位分为172.16.0.0/25---172.16.31.128 25作为其中前一个骨干ip网段 172.16.0.0/25在用于只…

TCP滑动窗口机制(附图例)

文章目录前言一、滑动窗口的引出二、流量控制2.1 16位窗口大小2.2 发送缓冲区2.3 逐步解析滑动窗口运作三、快重传机制四、拥塞控制(仅供参考)五、延迟应答与捎带应答(略)总结前言 博主个人社区:开发与算法学习社区 博…

测开-刷笔试题时的知识点

圈复杂度(暂缓)复杂度越大,程序越复杂计算公式:V(G) E - N 2E代表控制流边的数量,n代表节点数量V (G) P 1p为判定节点数几种常见的控制流图:Linux文件权限具有四种访问权限:r(可…

进程信号理解3

进程信号理解3 1.什么叫做信号递达 实际执行信号的处理动作叫做信号递达,比如默认,忽略,自定义动作 2.什么叫做信号未决? 信号产生到信号递达的状态叫做信号未决 3.进程被阻塞和进程被忽略有什么区别? 进程被阻塞属…

iPhone更换字体教程,无需越狱,支持所有苹果设备!

上周开始,技术大神zhuowei 发现了一个iOS系统更换字体的漏洞,经过不断修正,现在已经可利用上了! 先来看看更换字体后的效果,更换之后,所有App上的字体都得到更改,下图是打开文章的效果 下图是聊…

excel查重技巧:如何用组合函数快速统计重复数据(上)

统计不重复数据的个数,相信不少小伙伴在工作中都遇到过这样的问题。通常的做法都是先把不重复的数据提取出来,再去统计个数。而提取不重复数据的方法之前也分享过,基本有三种方法:高级筛选、数据透视表和删除重复项。其实使用公式…

Ngnix 实现访问黑名单功能

前言 有时候在配置的时候我们会禁用到一些IP,使用nginx 禁用到ip但是需要重启nginx,这样当我们要是实现动态的这种就比较麻烦,当然你可以使用网关来实现相对于nginx实现的这种方式要好很多,但是今天咱们说到这里,那就…

数据可视化系列-05数据分析报告

文章目录数据可视化系列-05数据分析报告1、了解初识数据分析报告数据分析报告简介数据分析报告的作用报告的能力体现报告编写的原则报告种类2、掌握数据分析报告结构标题页目录前言正文结论与建议附录3、了解报告的描述规范报告注意事项报告表达的维度数据结论可用指标数据可视…