相同的树

概述:给你两棵二叉树的根节点 pq ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

输入:p = [1,2,3], q = [1,2,3]
输出:true输入:p = [1,2], q = [1,null,2]
输出:false输入:p = [1,2,1], q = [1,1,2]
输出:false

方法一:深度优先搜索

思路:如果两个二叉树都为空,则两个二叉树相同。如果两个二叉树中有且只有一个为空,则两个二叉树一定不相同。如果两个二叉树都不为空,那么首先判断它们的根节点的值是否相同,若不相同则两个二叉树一定不同,若相同,再分别判断两个二叉树的左子树是否相同以及右子树是否相同。这是一个递归的过程,因此可以使用深度优先搜索,递归地判断两个二叉树是否相同。

# 深度优先搜索
class Solution:def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:if not p and not q: # 两棵树都为空return Trueelif not p or not q: # 一棵树为空return False elif p.val != q.val: # 都不为空,判断左右子树return Falseelse:return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)

方法二:广度优先搜索

思路:也可以通过广度优先搜索判断两个二叉树是否相同,同样首先判断两个二叉树是否为空。如果搜索结束时两个队列同时为空,则两个二叉树相同。如果只有一个队列为空,则两个二叉树的结构不同,因此两个二叉树不同。如果两个二叉树都不为空,则从两个二叉树的根节点开始广度优先搜索。

# 广度优先搜索
class Solution:def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:if not p and not q: # 两棵树都为空return Trueif not p or not q:return Falsequeue1 = collections.deque([p])queue2 = collections.deque([q])while queue1 and queue2:node1 = queue1.popleft()node2 = queue2.popleft()if node1.val != node2.val:return Falseleft1, right1 = node1.left, node1.rightleft2, right2 = node2.left, node2.rightif (not left1) ^ (not left2):return Falseif (not right1) ^ (not right2):return Falseif 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

总结

美好的一天,从LeetCode开始!

LeetCode(Python)—— 相同的树(简单)相关推荐

  1. LeetCode Python实现 二叉树简单部分

    LeetCode Python实现 二叉树简单部分 ''' 1 二叉树的最大深度 给定一个二叉树,找出其最大深度.二叉树的深度为根节点到最远叶子节点的最长路径上的节点数.说明: 叶子节点是指没有子节点 ...

  2. LeetCode Python实现 链表简单部分

    LeetCode Python实现 链表简单部分 我以前完全没有写过关于链表的东西,node.val=node.next.val#当前值被后一个值覆盖node.next=node.next.next# ...

  3. 一步一步学python爬虫_初学Python之爬虫的简单入门

    初学Python之爬虫的简单入门 一.什么是爬虫? 1.简单介绍爬虫 爬虫的全称为网络爬虫,简称爬虫,别名有网络机器人,网络蜘蛛等等. 网络爬虫是一种自动获取网页内容的程序,为搜索引擎提供了重要的数据 ...

  4. Python实现FP树

    目录 FP树的基础知识 疑问与数据构建的想法 Python代码 FP树是用来挖掘最大频繁k项集的一种数据结构,相对来说难度较大,因为在前辈们的博客中,对于FP树的实现讲的是比较清楚了,但是对于FP的编 ...

  5. python实现kd树以及最近邻查找算法

    python实现kd树以及最近邻查找算法 一.kd树简介 二.kd树生成 1.确定切分域 2.确定数据域 3.理解递归树 4.python实现递归树代码 三.kd树上的最近邻查找算法 1.生成搜索路径 ...

  6. Python 数据结构 tree 树

    [Python] 数据结构 tree 树 树节点类 TreeNode 作为最简单的树节点,我们只需要3个基本属性 name: 当前节点的名字(使用str来保存) parent: 父节点对象(对根节点来 ...

  7. python实现的超简单圣诞树

    目录 前言 Python实现圣诞树 源码 写在最后 前言 这两天在上课的时候,有同学问我有没有最简单,小白也能上手实现的python源码圣诞树呢?我告诉他肯定有,而且超级简单,也就6行代码就可以实现出 ...

  8. Python生成目录树

    1.CMD生成目录树 1.1 查看帮助 1.2 作用 1.3 命令格式 2.Python生成目录树 2.1 标准库pathlib介绍 2.2 代码实现 2.3 改进,显示指定目录 2.4 改进,保存文 ...

  9. 使用Python,OpenCV实现简单的场景边界/拍摄转换检测器

    使用Python,OpenCV进行简单的场景边界/拍摄转换检测器 1. 效果图 2. 实现 2.1 步骤 2.2 什么是"场景边界"和"拍摄过渡"? 2.3 代 ...

  10. python tkinter库、添加gui界面_使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)...

    使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二),创建一个,界面,布局,文件,路径 使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二) ...

最新文章

  1. 爬虫python的爬取步骤-python爬虫实战之爬取京东商城实例教程
  2. Linux7如何手动建库,Centos 7系列删除数据库并重新安装
  3. 界面 高炉系统_首钢京唐七大系统介绍
  4. leetcode 605. 种花问题(贪心算法)
  5. c 调用matlab文件路径,C/C++下调用matlab函数操作说明
  6. ROS入门笔记(六): ROS系统架构
  7. TensorFlow运作方式入门
  8. 共享会话怎么设置没访问自动断开_谁总结的JavaWeb会话技术了?太全面了...
  9. Struts2 Action的访问路径
  10. D. Little Artem and Dance
  11. mysql轻量在线管理工具_重磅推荐!我在Github找到一个超级轻量、灵活的SQL工具...
  12. j2me解决模拟器乱码
  13. 自动化办公-Python处理Excel生成试卷
  14. 狂神说Vue笔记整理
  15. 天气系统(环境系统)_SLG项目开发经验三
  16. echarts 双y轴设置
  17. 【Java】9、Java IO 流
  18. 最值得入手的五款骨传导耳机,几款高畅销的骨传导耳机
  19. Oracle 学习之建表、索引、同义词以及SQL优化
  20. Protocol Buffer 时间类型定义

热门文章

  1. 中国移动的用户ARPU重新进入上升通道,员工薪酬也稳步上涨
  2. 基于ffmpeg+SDL 实时播放摄像头视频
  3. Android 11:固定热点的ip地址
  4. springboot中使用注解获取前台header信息
  5. Docker仓库认证registry
  6. github commit 时丰富多彩的图标到底是怎么弄的?这样!
  7. 史上最全canOpenURL: failed问题解决办法
  8. shell经典,shell十三问
  9. JVM GC(垃圾回收机制)Minro GC,Major GC/Full GC
  10. 地球半径约多少米多少千米