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

news/2024/10/18 8:22:00/

题目

在这里插入图片描述

在这里插入图片描述
题目链接:
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.ppmy.cn/news/1440780.html

相关文章

【SpringBoot整合系列】SpringBoot整合JPA

目录 前期回顾ORM解决方案 JPA简介JPA的组成技术ORM映射元数据Java持久化API查询语言&#xff08;JPQL&#xff09; JPA的优势JPA的缺点 Spring Data JPASpring Data JPA简介Spring Data 家族Spring Data JPA、JPA和其他框架之间的关系 SpringBoot整合JPAJPA的核心注解1.依赖2.…

vite-electron 静默打印功能实现

系列文章目录 electronvitevue3 快速入门教程 文章目录 系列文章目录前言一、实现方案二、< webview />讲解1、属性2、 监听事件3、方法 三、 webview与渲染进程通信1.渲染进程--->webview2.webview--->渲染进程&#xff1a; 四、代码实战打印样式说明踩坑说明 前…

如何在Windows 11中安装或删除可选功能?这里提供详细步骤

序言 Windows 11提供了各种各样的功能,其中许多功能,如Linux的Windows子系统(WSL)和语言包,它默认情况下不会安装。你也可以删除默认情况下安装的功能,以下是如何以图形方式或从命令行执行此操作。 关于Windows 11中的可选功能,你需要了解的内容 还有其他添加和删除功…

第一章Hadoop概述

1. Hadoop是什么 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。主要解决&#xff0c;海量数据的存储和海量数据的分析计算问题。广义上来说&#xff0c;Hadoop通常是指一个更广泛的概念--Hadoop生态圈 2. Hadoop发展历史&#xff08;了解&#xff09; Hadoop创始人…

debian配置distcc分布式编译

前言 distcc 是一个用于在网络上的多台机器上分发 C、C、Objective C 或 Objective C 代码构建的程序。 distcc 应始终生成与本地构建相同的结果&#xff0c;易于安装和使用&#xff0c;并且通常比本地编译快得多。 distcc 不要求所有机器共享文件系统、同步时钟或安装相同的…

Autosar MCAL-RH850P1HC Fls配置

文章目录 FlsFlsGeneralFlsAcLoadOnJobStartFlsBaseAddressFlsBlankCheckApiFlsCancelApiFlsCompareApiFlsCopySupportedFlsCriticalSectionProtectionFlsDevErrorDetectFlsDeviceNameFlsDriverIndexFlsFaciEccCheckFlsGetJobResultApiFlsGetStatusApiFlsLoopCountFlsReadImmed…

用flutter实现类似startActivityForResult和onActivityResult功能

今年实在是大卷元年呀&#xff0c;莫名其妙的flutter就开始在各大公司火了起来&#xff0c;然后就是全员学习flutter&#xff0c;公司可以不用&#xff0c;但是你必须得会。隔壁IOS同事瑟瑟发抖&#xff0c;咋啦&#xff1f;意思就是我走咯&#xff1f; 不管怎么说&#xff0c;…

AI预测体彩排列3第2套算法实战化测试第5弹2024年4月27日第5次测试

今天继续进行新算法的测试&#xff0c;今天是第5次测试。好了&#xff0c;废话不多说了&#xff0c;直接上图上结果。 2024年4月27日体彩排3预测结果 6码定位方案如下&#xff1a; 百位&#xff1a;6、2、1、7、8、9 十位&#xff1a;8、9、4、3、1、0 个位&#xff1a;3、7、8…