当前位置: 首页 > news >正文

Leetcode力扣秋招刷题路-0100

从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结

100. 相同的树

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

示例 1:

在这里插入图片描述

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

示例 2:

在这里插入图片描述

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

示例 3:
在这里插入图片描述

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

提示:
两棵树上的节点数目都在范围 [0, 100] 内
−104-10^4104 <= Node.val <= 10410^4104

思路一:DFS
特例处理,先比较两个根节点: 如果两节点都为空,返回true; 如果两节点一个为空一个不为空,返回false; 如果两节点值不相同,返回false
如果两个节点值相同,比较左子树和右子树是否相同,这就进入了递归

代码

class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {if(p == null && q == null){return true;}else if(p == null || q == null){return false;}else if(p.val == q.val){return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);}return false;
}

复杂度分析

时间复杂度:O(min(m,n))O(min(m,n))O(min(m,n)),m和n分别是两个树的节点数
空间复杂度:O(min(height1,height2))O(min(height1,height2))O(min(height1,height2)),两树高度

思路二:BFS
特例处理:如果两根节点都为空,返回true;如果两根节点一个为空一个不为空,返回false
用两个队列分别存储p树和q树的节点,只要两个队列都非空就进入循环
循环中,先弹出两个队列的节点,如果值不同,直接返回false
接下来比较俩节点的子节点情况,如果俩节点的左子节点和右子节点没有分别都存在或都不存在,返回false
存在的子节点们分别入队
循环结束后,只有当两个队列都为空时才会返回true

代码

class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {if(p == null && q == null){return true;}else if(p == null || q == null){return false;}Queue<TreeNode> queue1 = new LinkedList<>();Queue<TreeNode> queue2 = new LinkedList<>();queue1.offer(p);queue2.offer(q);while(!queue1.isEmpty() && !queue2.isEmpty()){TreeNode node1 = queue1.poll();TreeNode node2 = queue2.poll();if(node1.val != node2.val){return false;}if((node1.left != null) ^ (node2.left != null)){return false;}if((node1.right != null) ^ (node2.right != null)){return false;}if(node1.left != null){queue1.offer(node1.left);}if(node1.right != null){queue1.offer(node1.right);}if(node2.left != null){queue2.offer(node2.left);}if(node2.right != null){queue2.offer(node2.right);}}return queue1.isEmpty() && queue2.isEmpty();}
}

复杂度分析

时间复杂度:O(min(m,n))O(min(m,n))O(min(m,n))
空间复杂度:O(min(m,n))O(min(m,n))O(min(m,n))

http://www.lryc.cn/news/19457.html

相关文章:

  • 协作对象死锁及其解决方案
  • 良许也成为砖家啦~
  • Java中的编程细节
  • Yolov8从pytorch到caffe (一) 环境搭建
  • 2023年CDGA考试-第16章-数据管理组织与角色期望(含答案)
  • Stream——集合数据按照某一字段排序
  • ubuntu:20.04编译arrow
  • 2023如果纯做业务测试的话,在测试行业有出路吗?
  • golang grpc ssl
  • 华为服务器驱动下载及安装
  • 【Shell】常用命令合集
  • 15- 答题卡识别及分数判定项目 (OpenCV系列) (项目十五)
  • LeetCode 热题 C++ 146. LRU 缓存
  • Java线程池使用与原理解析(线程池优点、使用方法、参数含义及线程池运转机制)
  • mybatis入门配置
  • 黑客入门(超级详细版)
  • Java多线程(三)---synchronized、Lock和volatile
  • JVM-Java内存区域
  • 毕业季,毕业论文查重,paper系列五个免费查重网站推荐
  • 破解票房之谜:为何高票房电影绕不过“猫眼们”?
  • 订单服务-----遇到的问题及解决方案
  • 项目经理如何度量项目?及项目度量指标实例【静说】
  • 我们应该如何优雅的处理 React 中受控与非受控
  • 力扣热题100Day06:20. 有效的括号,21. 合并两个有序链表,22. 括号生成
  • 【Yolov5】保姆级别源码讲解之-推理部分detect.py文件
  • 无重叠区间-力扣435-java贪心策略
  • Python使用VTK对容积超声图像进行体绘制(三维重建)
  • JAVA设计模式之工厂模式讲解
  • 近万字概述L3及以上自动驾驶故障运行和故障安全机制
  • kafka入门到精通