【Leetcode】100. 相同的树

news/2024/9/17 13:49:07

题目

给定两个二叉树,编写一个函数来检验它们是否相同。

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

示例 1:

输入:       1         1/ \       / \2   3     2   3[1,2,3],   [1,2,3]输出: true
示例 2:
输入:      1          1/           \2             2[1,2],     [1,null,2]输出: false
示例 3::
输入:       1         1/ \       / \2   1     1   2[1,2,1],   [1,1,2]输出: false

题解

大多数的二叉树题目都是用递归可以解的。
所以当拿到二叉树的题目的时候,我们首先就是看看能拆解成哪些子问题。
这个问题的子问题很简单,就是左子树,右子树都相等的二叉树是相同的二叉树。

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {if (p == null && q == null) {return true;} else if (p == null || q == null) {return false;}if (p.val == q.val) {return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);} else {return false;}}
}

那如果用非递归解怎么解呢?
如果遇到二叉树的问题,没思路还有第二招,就是想想看是不是遍历的变种

  • 先序遍历
  • 中序遍历
  • 后序遍历
  • 层次遍历

我们可以用队列,一起进行层序遍历,同时比较左右两颗树:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {if (p == null && q == null) {return true;} else if (p == null || q == null) {return false;}LinkedList<TreeNode> queue = new LinkedList<>();queue.add(p);queue.add(q);while(!queue.isEmpty()) {TreeNode left = queue.poll();TreeNode right = queue.poll();if (left == null && right == null) {// 都是空的,遍历到叶子节点了continue;} else if (left == null || right == null) {// 有一个为nullreturn false;} else if (left.val != right.val) {// 不相等.return false;}// 左子树入队queue.add(left.left);queue.add(right.left);// 右子树入队queue.add(left.right);queue.add(right.right);}return true;}
}

其实我们本质上就是要比较左右两棵树,也没必要非要是队列,其实stack也是可以的,大同小异。所以并不是你记住哪种数据结构,关键是你能理解后,灵活应用.

    public boolean isSameTree(TreeNode p, TreeNode q) {if (p == null && q == null) {return true;} else if (p == null || q == null) {return false;}Stack<TreeNode> stack = new Stack<>();stack.push(p);stack.push(q);while(!stack.isEmpty()) {TreeNode left = stack.pop();TreeNode right = stack.pop();if (left == null && right == null) {continue;} else if (left == null || right == null) {return false;} else if (left.val != right.val) {return false;}stack.push(left.left);stack.push(right.left);stack.push(left.right);stack.push(right.right);}return true;}

相关阅读

  • 技术文章汇总
  • 【Leetcode】98. 验证二叉搜索树
  • 【Leetcode】95~96 不同的二叉搜索树

Leetcode名企之路


http://lihuaxi.xjx100.cn/news/268237.html

相关文章

全国计算机二级计基础题第十五套,2014计算机二级VF试题及答案解析(第十五套)...

第15套一、基本操作题(共4小题&#xff0c;第1和2题是7分、第3和4题是8分)在考生文件夹下完成如下操作&#xff1a;1.建立数据库orders_manage&#xff0c;并将自由表employee和orders添加到新建的数据库中。2.建立必要的索引&#xff0c;并建立表employee和表orders之间的永久…

清华博士接亲被要求现场写代码,新娘:提醒他吃饭的手艺不能忘!

点击上方“视学算法”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达陕西西安&#xff0c;一位新郎接亲时&#xff0c;被新娘要求当场写代码编程。新郎忙得满头大汗&#xff0c;终于在5分钟内完成考验&#xff0c;在电脑上做出一颗红彤彤的爱心…

python判断字符串是否是数字字母

str.isnumeric(): True if 只包含数字&#xff1b;otherwise False。注意&#xff1a;此函数只能用于unicode stringstr.isdigit(): True if 只包含数字&#xff1b;otherwise False。str.isalpha()&#xff1a;True if 只包含字母&#xff1b;otherwise False。str.isalnum()&…

我为什么放弃Java,却选择Python?

不可否认的是&#xff0c;Python 凭借超广泛的应用方向&#xff0c;已成为了最受欢迎的编程语言。不过&#xff0c;真正让我喜欢上 Python 的原因&#xff0c;是我发现做同样功能的代码&#xff0c;从 Java 换成 Python 以后&#xff0c;代码量直接从 2000 行减少到 200 行。甚…

资源|深度学习注意力机制TensorFlow 使用教程

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达【导读】本资源介绍了以下3个方面&#xff1a;1)如何在图像上应用CNN attention。2&#xff09;神经机器翻译中的注意机制。3&#xff09;在图像配图中应用attention和双随…

嵌入式环境部署

在嵌入式环境中部署环境&#xff1a; 1.1 在linux中&#xff0c;当文件系统初始化后&#xff0c;在vi /etc/profile中可以输入一个命令&#xff0c;来配置系统的ip地址&#xff1a; ifconfig eth0 192.168.1.10 这样就能实现&#xff0c;系统上电后的配置。

Scrapy框架的入门使用

1 安装scrapy 命令:     sudo apt-get install scrapy 或者&#xff1a;     pip/pip3 install scrapy 2 scrapy项目开发流程 创建项目:     scrapy startproject mySpider生成一个爬虫:     scrapy genspider itcast itcast.cn提取数据:     根据网站结…

视频文件格式

视频文件不同的分类 微软视频wmv、asf、asxReal Playerrm、 rmvbMPEG视频mpg、mpeg、mpe手机视频3gpApple视频movSony视频mp4、m4v其他常见视频avi、dat、mkv、flv、vob常见视频文件格式 常见视频文件格式1GIF&#xff08;.GIF)是CompuServe公司退出的一种高压缩比的彩色图像文…