判断一棵树是不是另外一棵树的子树(dfs)

深度优先算法和广度优先算法 今天做了daoti 阅读详情

链接:http://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88?tpId=13&tqId=11170&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking


/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
    {
          if(pRoot2==NULL) return false;
          return solve(pRoot1,pRoot2,pRoot2->val);
    }
    bool solve(TreeNode* p1,TreeNode* p2,int val)
        {
            if(p1==NULL) return false;
            if(p1->val==val&&same(p1,p2)) return true;
            return solve(p1->left,p2,val)||solve(p1->right,p2,val);
    }
    bool same(TreeNode*p,TreeNode* pp)
        {
           if(pp==NULL) return true;
           if(p==NULL) return false;
           if(p->val!=pp->val) return false;
           return same(p->left,pp->left)&&same(p->right,pp->right);
    }
};


【算法】深度优先遍历(DFS)算法详解与实现 深度优先遍历是一种重要的遍历算法,对于理解树和图的结构及其应用具有重要意义。通过掌握深度优先遍历的原理和常见实现方式,能够更加深入地理解算法的本质,并能够应用于解决各种相关问题。 阅读详情

相关推荐

572. 另一棵树的子树

572. 另一棵树的子树1 递归 1 递归 https://leetcode-cn.com/problems/subtree-of-another-tree/solution/java-di-gui-ban-by-kelly2018/ 感觉是两个深度优先遍历。 内层是判断当前节点root与suboot比较是否相等,注意对所有节点用的是&&。 外层是一个前序遍历,相当于一个个节点试,只要有一个满足就行,用的是 || 。 /** * Definition for a binary tre

qq_60225495的博客 697

如何判断一棵树是不是另一棵树的子树

情况一:两棵树均是有序的,即树的左右子树的顺序是固定的 分析:假设这两棵树中的第一棵为母树,另一棵为子树。首先在母树中搜索子树的根节点,找到根节点之后就按照该根节点向下搜索比较,如果比较结果为true即子树是母树的一棵子树,否则的话继续向下搜索子树根节点在母树中的位置,如此递归下去最终即可得到结果。 package suanfaTest; class TreeNode{ int v...

Marmara 1970

【HDR】曝光融合(Exposure Fusion)

在曝光融合(Exposure Fusion)算法问世之前,多曝光序列合成用于显示的HDR需要两个步骤,第一步是将多张不同曝光的低动态范围图像合成为HDR(例如Debevec提出的加权融合方法),通常HDR为12bit或者16bit;第二步是通过tonemapping对高动态范围HDR进行压缩以支持低动态范围显示设备(例如Durand提出的基于双边滤波的tonemapping算法),一般会压缩至8bit。

专注人工智能,主攻CV 1万+

利用DFS序求树中以某点为根节点的子树

利用DFS序求树中以某点为跟节点的子树 定义 :在一棵树中,每一个节点在dfs深度优先遍历的时间序列(将树形结构转化为线性结构) 核心代码及数据结构 vector<int> tree[100]; //存放的栈,为什么不用数组?因为栈好处理 int in[100]; //进入的时间戳 int out[100]; //出去的时间戳 int num[200]; ...

lhc121386的博客 1296

Kriging代理模型理论相关推导

代理模型,Kriging,加点准则

森屹的博客 1万+

基于STM32智能教室灯光照明人数监测系统

本文设计了一套基于STM32和物联网技术的智能教室照明系统,通过光照传感器和双红外对管实现精准人数统计,结合"光照+人数"双条件判断实现按需照明。系统采用"感知-决策-执行-云联"架构,包含环境感知、人数统计、控制执行等模块,支持本地自动控制和手机APP远程管理。测试表明系统能有效避免"长明灯"现象,具有节能降耗、管理智能化的特点。创新点在于双向人数统计算法和双条件控制逻辑,为智慧校园建设提供了实用解决方案。

1159

一棵树是否为另一棵树的子结构

题目描述 输入两颗二叉树A,B,判断B是不是A的子结构。 问题描述:给定两个二叉树的根节点,判断第二树是否是第一个树的子树,如果是返回1,否则返回0. 分析:这个是百度的一道笔试题目,属于经典的数据结构问题,子树判断问题,针对这个问题可以采用递归的方法判断,          拿第二个树的每个节点去和第一个树做匹配,如果某个节点匹配成功,就接着往下匹配,否则重新从第

Smile&搁浅 2155

Cadence Allegro 17.4 保姆级教程:PCB位号重排与反标回原理图完整避坑指南

本文详细解析了Cadence Allegro 17.4中PCB位号重排与反标回原理图的全流程,包括安全工程准备、智能重排策略和反标黄金法则。特别针对芯片封装协同设计(Co-Design)场景,提供可追溯的版本管理和故障恢复方案,帮助工程师避免常见位号陷阱,确保设计文件一致性。

weixin_30613433的博客 438

树T1交换其(某些)左右节点的左右儿子变换成树T2,则是同构。给出一个多项式时间算法以决定是否两棵树同构

数据结构与算法分析——c语言描述 练习4.42a 答案 很惭愧,不会计算复杂度。大神看到了请指教。 int IsIsomorphic(SearchTree t1, SearchTree t2) { if (t1&&t2) { if (t1->element != t2->element) return 0; return (isomorphic(t1->left

wwj_bupt 3091

KUKA机器人编程实战:5分钟搞定组输入与组输出的信号配置(附代码示例)

本文详细介绍了KUKA机器人编程中组输入与组输出的信号配置方法,通过5分钟快速掌握核心技巧。文章包含信号声明语法、典型配置流程及高级应用技巧,并附有代码示例,帮助工程师高效实现机器人与外部设备的通信。

efc123456的博客 851

从零到一破解Uber实时行程API:逆向工程与高并发爬虫实战

在数据采集领域,Uber的实时行程数据始终处于“传说级”难度。动态令牌系统- 每30秒轮换的Bearer Token证书固定(Certificate Pinning)- 阻止中间人攻击请求签名算法- 基于时间戳+用户设备的HMAC-SHA256行为分析- 鼠标轨迹、请求间隔的机器学习模型全链路加密- GraphQL端点的payload加密目录前言:为什么Uber爬虫被称为“地狱难度”?第一章:环境准备与法律边界1.1 技术栈选择(2026年最新)1.2 法律免责声明。

2201_76125261的博客 892

判断一棵树是否为另一棵树的子树

参考链接:判断一棵树是否为另一棵树的子树 思路: 1、原二叉树走前序遍历,试图发现哪个节点的值和被判断子树的根节点相同; 如果一直到最后也没有找到那么肯定不是 2、如果找到了,就两个二叉树一起前序遍历,试图发现两个二叉树同时遍历完成,且同样的左右子树遍历过程中的节点值均相同,同时遍历完成说明有相同的形状,左右子树遍历过程中的节点值均相同说明两个二叉树不仅形状一样,值也是一样,则可以认为是子...

qq_29762941的博客 1533

Debezium报错处理系列之第112篇:Cannot replicate because the master purged required binary logs. Replicate the

Debezium报错处理系列之第112篇:Cannot replicate because the master purged required binary logs.

zhengzaifeidelushang的博客 726

【数据结构】一文吃透深度优先算法:原理、实现与应用

        深度优先算法作为一种基础且强大的搜索算法,以其独特的深度优先探索和回溯机制,在树和图的遍历以及众多实际问题的解决中发挥着关键作用 。我们深入剖析了它的核心思想,详细介绍了在二叉树和图中的实现方式,包括递归和非递归(栈实现)两种方法,并通过丰富的实际应用场景,如迷宫问题求解、拓扑排序和八皇后问题,展示了其广泛的适用性和强大的功能。同时,我们也全面分析了它的优缺点,使大家对其性能有了更清晰的认识。

大雨淅淅的博客 2110

基于潜在空间分数匹配的混合型表格数据合成方法

然而,在我们的模型中,β 预计会更小,因为我们不需要嵌入的分布精确地遵循标准高斯分布,因为我们还有一个额外的扩散模型。受 Transformer 在表格数据分类/回归任务中取得成功的启发,我们首先为每一列学习一个独特的标记器,然后将标记(列)级表示输入到 Transformer 中,以捕捉列之间错综复杂的关系。在第 4 节中,我们证明了通过这种设计,TABSYN 可以在不到 20 次函数评估(NFE)的情况下生成高质量的合成表格数据,这比其他基于扩散的表格数据合成方法要少得多。是标记器的可学习参数。

步子哥的博客 853

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【leetcode】相同的树、另一棵树的子树、翻转二叉树(利用深度优先遍历)

一定要结合图像来写题,递归有点绕,将大问题划分成一个一个相同的小问题来求解,一定要注意判断条件。

明志の博客 1373

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【LeetCode: 572. 另一棵树的子树 + 二叉树 + dfs】

【LeetCode: 572. 另一棵树的子树 + 二叉树 + dfs】给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。

Coder_ljw的博客 926

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

深度优先算法(DFS)和广度优先算法(BFS)

DFS和BFS介绍

愿你我都能实现自己的梦想 4706

[E二叉树] lc572. 另一棵树的子树(dfs嵌套+前中序判断+树哈希+树上KMP+好题)

还是简单粗暴一点,直接搞一个 前序+中序,进行判断即可。我们知道通过 前序+中序,是可以构建出一颗唯一的二叉树的,当然可以通过 前序+中序,去判断两颗二叉树是不是一样的。每个点,都可能是目标子树的根节点,同时我们需要判断当根节点确定时,该根节点的子树是否等于目标子树。看到这个题目就感觉不简单,因为写了写 dfs 版本的,发现好像不太会…评论区有提到 树上 HASH 的方法字节面试过…至于其他的写法,看官解吧。前、中 序判断二叉树。

Y-puyu 的博客 751

leetcode 572: 另外一颗树的子树(DFS)

题解 题意:给定两颗树的根节点,s,t,判断t所表示的树是不是s所表示的树的子树 题解:总共三种情况,要么s树等于t树,要么s树的左子树等于t树的左子树,要么s树的右子树等于t树的右子树,如果s树遍历完了都没找到t树重合的子树,那么说明没有 同样的实现,java递归效率为什么比C++高这么多? C++版本 class Solution { public: bool dfs(Tre...

Einskai216的博客 264

LeetCode 572. 另一棵树的子树(深度优先搜索dfs、二叉树)

【代码】LeetCode 572. 另一棵树的子树(深度优先搜索dfs、二叉树)

记录一些刷过的题并分享学习心得 736

leetcode 572. 另一棵树的子树(java)

如何判断一个节点的子树是否和 t 相等呢,我们又需要做一次深度优先搜索来检查,即让两个指针一开始先指向该节点和 t 的根,然后「同步移动」两根指针来「同步遍历」这两棵树,判断对应位置是否相等。输入:root = [3,4,5,1,2,null,null,null,null,0], subRoot = [4,1,2]二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。输入:root = [3,4,5,1,2], subRoot = [4,1,2]来源:力扣(LeetCode)

SP_1024的博客 355

leetcode刷题 572. 另一棵树的子树,Easy (Java)DFS&暴力+DFS&KMP

leetcode刷题 572. 另一棵树的子树,Easy (Java)DFS&暴力+DFS&KMP

Sueko的博客 721

深度优先遍历(DFS)

深度优先遍历(,全称为),是我们树或者图这样的数据结构中常⽤的⼀种。这个算法会尽可能深的搜索树或者图的分⽀,直到⼀条路径上的所有节点都被遍历完毕,然后再回溯到上⼀层,继续找⼀条路遍历。以及。因为树的定义本⾝就是递归定义,因此采⽤递归的⽅法去实现树的三种遍历不仅容易理解⽽且代码很简洁。并且前中后序三种遍历的唯⼀区别就是,在做题的时候,选择⼀个适当的遍历顺序,对于算法的理解是⾮常有帮助的。

ijj_zZ的博客 2985

【LeetCode每日一题】——572.另一棵树的子树

给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。

IronmanJay 405

数据结构与算法之深度优先算法详解

深度优先算法的时间复杂度为$O(V+E)$,其中$V$是图的节点数量,$E$是图的边数量。另外,深度优先算法的空间复杂度为$O(V)$,其中$V$是图的节点数量,因为需要存储每个节点的访问状态。深度优先算法(Depth First Search,DFS)是一种常见的图形算法,它是一种用于遍历或搜索树或图的算法。在深度优先搜索中,我们首先探索一个子树的深度,然后再回溯到父节点,接着探索另一个子树的深度,直至搜索结束。深度优先算法的工作原理类似于树的前序遍历,即首先访问根节点,然后依次访问该节点的子节点。

记录 IT 领域经验与见解的博客 2271
上一篇: 用两个栈实现队列
下一篇: 求一棵树的镜像树
左眼皮跳跳~
博客等级 码龄13年 17粉丝 400原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值