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

南宁网站建设公司电话网站导航栏条源码

南宁网站建设公司电话,网站导航栏条源码,做网页前端接活网站,长沙地区网络优化设计方案优质博文:IT-BLOG-CN 一、题目 给你两棵二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入:p [1,2,3], q [1,…

优质博文:IT-BLOG-CN

在这里插入图片描述

一、题目

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

示例 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 <= Node.val <= 104

二、代码

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

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
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))其中mn分别是两个二叉树的节点数。对两个二叉树同时进行深度优先搜索,只有当两个二叉树中的对应节点都不为空时才会访问到该节点,因此被访问到的节点数不会超过较小的二叉树的节点数。
**空间复杂度:O(min⁡(m,n))其中mn分别是两个二叉树的节点数。空间复杂度取决于递归调用的层数,递归调用的层数不会超过较小的二叉树的最大高度,最坏情况下,二叉树的高度等于节点数。

【2】广度优先搜索: 可以通过广度优先搜索判断两个二叉树是否相同。首先判断两个二叉树是否为空,如果两个二叉树都不为空,则从两个二叉树的根节点开始广度优先搜索。使用两个队列分别存储两个二叉树的节点。初始时将两个二叉树的根节点分别加入两个队列。每次从两个队列各取出一个节点,进行如下比较操作。
  ■ 比较两个节点的值,如果两个节点的值不相同则两个二叉树一定不同;
  ■ 如果两个节点的值相同,则判断两个节点的子节点是否为空,如果只有一个节点的左子节点为空,或者只有一个节点的右子节点为空,则两个二叉树的结构不同,因此两个二叉树一定不同;
  ■ 如果两个节点的子节点的结构相同,则将两个节点的非空子节点分别加入两个队列,子节点加入队列时需要注意顺序,如果左右子节点都不为空,则先加入左子节点,后加入右子节点。

如果搜索结束时两个队列同时为空,则两个二叉树相同。如果只有一个队列为空,则两个二叉树的结构不同,因此两个二叉树不同。

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {// 广度优先:需要两个队列:LinkedListif (p == null && q == null) {return true;} else if (p == null || q == null) {return false;}Queue<TreeNode> m = new LinkedList<TreeNode>();  // 存放 p 节点Queue<TreeNode> n = new LinkedList<TreeNode>();  // 存放 q 节点m.offer(p);n.offer(q);while(!m.isEmpty() && !n.isEmpty()) {TreeNode node1 = m.poll();TreeNode node2 = n.poll();// 不同返回 false,相同还需要看左右节点if (node1.val != node2.val) {return false;}// 获取平铺列表TreeNode left1 = node1.left;TreeNode right1 = node1.right;TreeNode left2 = node2.left;TreeNode right2 = node2.right;if (left1 == null ^ left2 == null) {return false;}if (right1 == null ^ right2 == null) {return false;}if (left1 != null) {m.offer(left1);}if (right1 != null) {m.offer(right1);}if (left2 != null) {n.offer(left2);}if (right2 != null) {n.offer(right2);}} return m.isEmpty() && n.isEmpty();}
}

时间复杂度: O(min⁡(m,n))其中mn分别是两个二叉树的节点数。对两个二叉树同时进行广度优先搜索,只有当两个二叉树中的对应节点都不为空时才会访问到该节点,因此被访问到的节点数不会超过较小的二叉树的节点数。
空间复杂度: O(min⁡(m,n))其中mn分别是两个二叉树的节点数。空间复杂度取决于队列中的元素个数,队列中的元素个数不会超过较小的二叉树的节点数。

http://www.yayakq.cn/news/883602/

相关文章:

  • 中江县 网站建设运营和营销有什么区别
  • 小米手表网站wordpress 在线点餐
  • 中企中立做的网站好吗公众号制作135
  • 千博网站建设哪个网站可以做链接
  • 乌克兰设计网站建设八戒网站建设
  • 网站设计公司深开封网站开发
  • 北仑网站建设29gz数据库2008做企业网站
  • 不是搜索网站的是阜宁做网站哪家公司最好
  • 免费网站建设入门重庆绝美的十大冷门景点
  • 有什么做logo网站连云港网站建设 连云港网站制作
  • 网站建设中图片联系方式河南网站定制
  • dephi 网站开发网页友情链接
  • 设计网站还有哪些问题站长数据
  • 东莞建站多少钱如何说课网站建设
  • 河南企业网站排名优化价格网站开发维护前景
  • 大学网站建设定制网站建设详情页模板下载
  • 好的网站设计培训学校注册商标设计
  • 可以放钓鱼网站的免费空间有哪些可以做推广的网站
  • 制作网页与网站qian p.wordpress
  • 大型 视频网站开发优秀网站建设出售
  • 铜陵市网站建设找图网
  • 哪个网站做房子团购北京手机版建站系统开发
  • %2enet网站开发软件产品设计流程
  • 网站怎么显示备案号宜阳建站
  • 游戏微网站模板网络营销广告词有哪些
  • 专业深圳网站定制开发郑州做网站狼牙
  • 模板王网站官网wordpress有点尴尬
  • 网站备案医疗保健审批号是什么长沙搜索排名优化公司
  • 网站改版301是什么意思巴中建设厅网站电话
  • 你会怎么做外国的网站成都青白江网站建设