牛客NC98 判断t1树中是否有与t2树完全相同的子树【simple 深度优先dfs C++/Java/Go/PHP】

题目

在这里插入图片描述

在这里插入图片描述
题目链接:
https://www.nowcoder.com/practice/4eaccec5ee8f4fe8a4309463b807a542

思路

深度优先搜索暴力匹配
思路和算法这是一种最朴素的方法——深度优先搜索枚举
s 中的每一个节点,判断这个点的子树是否和
t 相等。如何判断一个节点的子树是否和
t 相等呢,我们又需要做一次深度优先搜索来检查,即让两个指针一开始先指向该节点和
t 的根,然后「同步移动」两根指针来「同步遍历」这两棵树,判断对应位置是否相等。

参考答案C++

/*** struct TreeNode {*  int val;*  struct TreeNode *left;*  struct TreeNode *right;*  TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* };*/
class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param root1 TreeNode类* @param root2 TreeNode类* @return bool布尔型*/bool isContains(TreeNode* root1, TreeNode* root2) {/*深度优先搜索暴力匹配思路和算法这是一种最朴素的方法——深度优先搜索枚举s 中的每一个节点,判断这个点的子树是否和t 相等。如何判断一个节点的子树是否和t 相等呢,我们又需要做一次深度优先搜索来检查,即让两个指针一开始先指向该节点和t 的根,然后「同步移动」两根指针来「同步遍历」这两棵树,判断对应位置是否相等。*/return dfs(root1, root2);}bool  dfs(TreeNode* s, TreeNode* t) {if (s == nullptr) return false;return check(s, t) || dfs(s->left, t) || dfs(s->right, t);}bool check(TreeNode* s, TreeNode* t) {if (s == nullptr && t == nullptr) return true;if (s == nullptr || t == nullptr || s->val != t->val)return false;return check(s->left, t->left) && check(s->right, t->right);}
};

参考答案Java

import java.util.*;/** public class TreeNode {*   int val = 0;*   TreeNode left = null;*   TreeNode right = null;*   public TreeNode(int val) {*     this.val = val;*   }* }*/public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param root1 TreeNode类* @param root2 TreeNode类* @return bool布尔型*/public boolean isContains (TreeNode root1, TreeNode root2) {/*深度优先搜索暴力匹配思路和算法这是一种最朴素的方法——深度优先搜索枚举s 中的每一个节点,判断这个点的子树是否和t 相等。如何判断一个节点的子树是否和t 相等呢,我们又需要做一次深度优先搜索来检查,即让两个指针一开始先指向该节点和t 的根,然后「同步移动」两根指针来「同步遍历」这两棵树,判断对应位置是否相等。*/return dfs(root1, root2);}public boolean dfs(TreeNode s, TreeNode t) {if (s == null) return false;return check(s, t) || dfs(s.left, t) || dfs(s.right, t);}public boolean check(TreeNode s, TreeNode t) {if (s == null && t == null) return true;if (s == null || t == null || s.val != t.val)return false;return check(s.left, t.left) && check(s.right, t.right);}
}

参考答案Go

package mainimport . "nc_tools"/** type TreeNode struct {*   Val int*   Left *TreeNode*   Right *TreeNode* }*//*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param root1 TreeNode类* @param root2 TreeNode类* @return bool布尔型*/
func isContains(root1 *TreeNode, root2 *TreeNode) bool {/*深度优先搜索暴力匹配思路和算法这是一种最朴素的方法——深度优先搜索枚举s 中的每一个节点,判断这个点的子树是否和t 相等。如何判断一个节点的子树是否和t 相等呢,我们又需要做一次深度优先搜索来检查,即让两个指针一开始先指向该节点和t 的根,然后「同步移动」两根指针来「同步遍历」这两棵树,判断对应位置是否相等。*/return dfs(root1, root2)
}func dfs(s, t *TreeNode) bool {if s == nil {return false}return check(s, t) || dfs(s.Left, t) || dfs(s.Right, t)
}func check(s, t *TreeNode) bool {if s == nil && t == nil {return true}if s == nil || t == nil || s.Val != t.Val {return false}return check(s.Left, t.Left) && check(s.Right, t.Right)
}

参考答案PHP

<?php/*class TreeNode{var $val;var $left = NULL;var $right = NULL;function __construct($val){$this->val = $val;}
}*//*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param root1 TreeNode类 * @param root2 TreeNode类 * @return bool布尔型*/
function isContains( $root1 ,  $root2 )
{/*深度优先搜索暴力匹配思路和算法这是一种最朴素的方法——深度优先搜索枚举s 中的每一个节点,判断这个点的子树是否和t 相等。如何判断一个节点的子树是否和t 相等呢,我们又需要做一次深度优先搜索来检查,即让两个指针一开始先指向该节点和t 的根,然后「同步移动」两根指针来「同步遍历」这两棵树,判断对应位置是否相等。*/return dfs($root1,$root2);
}function dfs($s,$t){if($s ==null) return false;return check($s,$t) || dfs($s->left,$t) || dfs($s->right,$t);
}function check($s,$t){if($s ==null && $t==null) return true;if($s ==null || $t==null || $s->val !=$t->val)return false;return check($s->left,$t->left) && check($s->right,$t->right);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/4432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JSP在页面用<%=调用声明函数时出现HTTP 500错误

JSP在页面用<%调用声明函数时出现HTTP 500错误 错误描述&#xff1a; Eclipse在编写JSP页面时&#xff0c;在其中采用<%&#xff01;%>方式声明了函数&#xff0c;然后在页面中用<%函数名%>方式调用时&#xff0c;出现HTTP状态500错误&#xff0c;提示为&#…

【吊打面试官系列】Java高并发篇 - Java 中 notify 和 notifyAll 有什么区别?

大家好&#xff0c;我是锋哥。今天分享关于 【Java 中 notify 和 notifyAll 有什么区别&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; Java 中 notify 和 notifyAll 有什么区别&#xff1f; notify() 方法不能唤醒某个具体的线程&#xff0c;所以只有一个线程…

maya blendshape

目录 shape编辑器 maya创建blendshape python 脚本 添加形变动画 查看顶点个数 shape编辑器 打开方式&#xff1a; 窗口-动画编辑器-形变编辑器 maya创建blendshape python 脚本 import maya.cmds as cmds# 创建基础网格 - 球体 baseMesh cmds.polySphere(name"bas…

路透社:美国SEC将拒绝以太坊ETF

4月25日&#xff0c;据路透社报道&#xff0c;美国SEC在下个月将拒绝以太坊现货ETF申请。根据4位知情人士表示&#xff0c;在最近几周与美国证券交易委员会&#xff08;SEC&#xff09;进行了会议之后&#xff0c;美国发行商和其他公司预计SEC将拒绝他们推出与以太坊价格挂钩的…

15(第十四章,大数据和数据科学)

目录 概述 基本概念 数据仓库/传统商务智能与数据科学的比较 数据科学的过程 大数据 大数据来源 数据湖 机器学习 监督学习 无监督学习 强化学习 扩展 1、数据仓库&#xff08;Data Warehouse&#xff09; 2、数据湖(Data Lake) 3、大数据平台1.0 4、数据中台 …

基于ssm的高校课程评价评教系统(含源码+sql+视频导入教程+文档+PPT)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于ssm的高校课程评价评教系统拥2有四种角色 管理员&#xff1a;学生管理、指标管理、课程两个、院系管理、评教管理等 学生&#xff1a;评教教师、登录注册、查看课程信息等 专家&am…

MySQL-多表查询-练习

练习 1.写一个查询显示所有雇员的 last name、department id、anddepartment name。 SELECT e.LAST_NAME,e.DEPARTMENT_ID,d.DEPARTMENT_NAME FROM employees e,departments d WHERE e.DEPARTMENT_ID d.DEPARTMENT_ID;2.创建一个在部门 80 中的所有工作岗位的唯一列表&#x…

递归、搜索与回溯算法:综合练习

例题一 解法&#xff1a; 算法思路&#xff1a; ⾸先&#xff0c;我们在第⼀⾏放置第⼀个皇后&#xff0c;然后遍历棋盘的第⼆⾏&#xff0c;在可⾏的位置放置第⼆个皇后&#xff0c;然后再遍历第三⾏&#xff0c;在可⾏的位置放置第三个皇后&#xff0c;以此类推&#xff0c…

解锁大模型高效推理:将 LlamaIndex 与抽象链集成

在语言理解领域&#xff0c;对忠实推理的追求促使研究人员探索各种途径。 大型语言模型&#xff08;LLMs&#xff09;在解释和执行指令方面取得了显著进展&#xff0c;但在准确回忆和组合现实世界知识方面仍然面临挑战。 为了解决这个问题&#xff0c;将外部工具集成到LLMs的…

北京摇号发展史!摇不到号是有原因的!

北京车牌摇号史可以追溯到较早的时期&#xff0c;但近年来随着城市发展和汽车保有量的增加&#xff0c;摇号政策经历了多次调整和完善。 在摇号政策实施初期&#xff0c;主要是为了解决城市交通拥堵和减少汽车尾气排放等问题。当时&#xff0c;申请车牌的人数相对较少&#xf…

龙腾启新·AI创未来—2024上海AIGC行业技术沙龙活动成功举办

随着人工智能技术的不断发展和创新&#xff0c;AIGC正逐渐成为科技领域的新热点。上海作为中国的经济中心和科技创新的重要城市&#xff0c;拥有众多优秀的科研机构、高校和企业&#xff0c;为AIGC领域的发展提供了丰富的人才和资源。 4月25日&#xff0c;上海市人工智能行业协…

第八周学习笔记DAY.4-实用类介绍

本课目标 能够定义并使用枚举类型 掌握包装类及装箱、拆箱概念 会使用Math类进行数学运算 枚举 枚举指由一组固定的常量组成的类型 Java API 常用Java API java.lang Enum、包装类、Math、String、StringBuffer、System… … java.util java.io java.sql … … 包装类…

大数据时代,保护个人隐私小Tips Get 起来!

随着大数据时代的到来&#xff0c;我们的隐私正处于越来越易被侵犯的风险中。在各种社交媒体和信息共享平台上&#xff0c;我们需要输入各种个人信息&#xff0c;而这些信息可能被不法分子盗取&#xff0c;甚至被用来进行欺诈行为。在如今的大数据时代&#xff0c;保护个人隐私…

进一步了解android studio 里 AGP,gradle等关系

目录 &#xff08;1&#xff09; gradle是什么 &#xff08;2&#xff09; 工程的jdk版本&#xff0c;及引用包的编译版本的关系 实践 问题与解决 编译成功与运行成功 编译成功 运行成功 &#xff08;1&#xff09; gradle是什么 Gradle是一个构建工具&#xff0c;它是…

(学习日记)2024.04.28:UCOSIII第五十二节:User文件夹函数概览(uC-LIB文件夹)第二部分

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

【八大排序(一)】插入排序与希尔排序

❣博主主页: 33的博客❣ ▶️文章专栏分类:八大排序◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多排序知识 目录 1.前言2.常见排序算法3.稳定性4.插入排序4.1概念4.2直接插入排序4.3希尔排序 5.总结 …

TechTool Pro for mac中文激活版:硬件监测和系统维护工具

TechTool Pro mac帮助用户实现系统硬件监测&#xff08;CPU、内存、硬盘、网络、USB等&#xff09;、内存测试、S.M.A.R.T检测、磁盘宗卷扫描、宗卷重建和优化、数据恢复和粉碎等等&#xff0c;定期使用&#xff0c;可以确保您的Mac保持优化和无故障。 TechTool Pro for mac v1…

机器学习笔记(二)回归

一、线性回归 线性回归是一种用于预测的统计方法&#xff0c;特别适用于连续值预测。&#x1f4c8;线性回归通过最小化误差的平方和来寻找一个线性关系&#xff0c;用于预测一个变量&#xff08;因变量&#xff09;基于一个或多个其他变量&#xff08;自变量&#xff09;的值。…

[Kubernetes] 集群重新初始化

文章目录 1.master节点2.worker节点3.查看结果 1.master节点 kubeadm reset清理信息: cd ~ 进入根目录ll -a 查看是否存在.kube文件 rm -rf /root/.kubesystemctl restart docker ## 重启docker systemctl restart kubelet ## 重启kubeletrm -rf /etc/cni/net.d初始化主节点…

【Canvas与艺术】绘制朝鲜国旗

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>绘制朝鲜国旗</title><style type"text/css">…