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

杭州专业网站营销中小企业做网站贷款

杭州专业网站营销,中小企业做网站贷款,福州网站建设软件,asp网站开发培训优质博文: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/983478/

相关文章:

  • 网站建设论坛报告海外医疗网站建设
  • 深圳seo网站设计wordpress 中文 图片
  • 上传网站再备案站长之家域名解析
  • 网站建设价格微信微网站开通
  • 建官方网站的公司注册域名怎么做网站
  • 如何选择南京网站建设大网站制作
  • 网站 域名第九影院用wordpress版权信息
  • 新余 网站建站 设计 公司wordpress赚钱插件
  • 兴安盟老区建设促进会网站创意设计
  • 中山企业网站多少钱杭州 做网站
  • 专门做推广的网站财政厅三基建设网站
  • 网站建设应该注意哪些原则wordpress js加速
  • 动漫做a视频网站网站建设微信营销
  • 网站注册搜索引擎的目的工商网官网查询企业信息
  • 毕业设计购物网站开发的意义淘宝客做连接网站吗
  • 网站服务器维护工具网页设计地址
  • 用flask做的网站wordpress配置多站点
  • 公司做网站收费网站建设发展现状
  • dw软件网站建设教程视频南阳做网站
  • 无锡建设网站的公司简介网站快速排名技巧
  • 洛阳网站制作建设网页剪辑app
  • 免费企业一键建站网站招工网站58同城
  • 三明市建设局网站电商系统网站建设
  • 鹤岗北京网站建设桂林市临桂区城乡建设局网站
  • 做网站如何导入信用卡付款做名片赞机器人电脑网站是多少
  • 网站建设网站搭建gui界面设计软件
  • 网站主页设计素材项目招商网站大全
  • 建设电影网站点击播放是乱页的wordpress允许用户修改文章
  • 网站建设的文章江苏弘盛建设工程集团有限公司网站
  • 网站开发海报做自己的网站服务器多少钱