Tree_Graph 判断T2是否为T1的子树 @CareerCup

【科学刷题】树的子结构与子树判断 文章目录1. 判断【树B】是否是【树A】的【子结构】/【子树】1.1 概念阐述1.2 完全匹配的情况1.3 部分匹配的情况2. 查找所有重复子树 1. 判断【树B】是否是【树A】的【子结构】/【子树】 1.1 概念阐述 首先阐述一个概念:子结构匹配与子树匹配 匹配: 完全匹配就是A的子结构与B完全匹配 部分匹配: 部分匹配就是A的子结构与B部分匹配,A的子结构允许有与B不匹配的其他结构 如何判断是【完全匹配】还是【部分匹配】呢?我们需要仔细读题: 1.2 完全匹配的情况 1.3 部分匹配的情况 2. 查 阅读详情

原文:

You have two very large binary trees: T1, with millions of nodes, and T2, with hundreds of nodes. Create an algorithm to decide if T2 is a subtree of T1

译文:

有两棵很大的二叉树:T1有上百万个结点,T2有上百个结点。写程序判断T2是否为T1的子树。


思路:

1) 因为中序前序遍历就可以决定一棵树,把两棵树的中序前序都写出来,如果两个遍历中T2都是T1的子串,可以确定T2是T1的子树。

当然这会遇到无法区分


的情况。因为

T1, in order: 3,3    T1, pre order 3,3

T2, in order: 3,3    T2, pre order 3,3

所以必须也算入null节点,所以

T1, in order: 0, 3, 0, 3, 0    T1, pre order 3, 3, 0, 0, 0

T2, in order: 0, 3, 0, 3, 0    T2, pre order 3, 0, 3, 0, 0

这种方法时间复杂度:O(n+m), 空间复杂度:O(n+m) , n,m分别为两个树的节点数。当海量数据时不适用!

2)递归!从根节点往下递归,判断子树是否存在其的左子树或右子树内。
时间复杂度:O(nm), 空间复杂度:O(log(n) + log(m))
但实际上,在真实的运行时,递归假如发现满足子树的条件就直接返回,而不会继续查找。因此递归法在实际中无论时间空间更优!

package Tree_Graph;

import CtCILibrary.AssortedMethods;
import CtCILibrary.TreeNode;

public class S4_8 {

	// 判断t2是否是t1的子树
	public static boolean isSubTree(TreeNode t1, TreeNode t2) {
		if(t2 == null) {			// 空树始终是另一个树的子树
			return true;
		}
		if(t1 == null) {		// 此时r2非空,非空树不可能是一个空树的子树
			return false;
		}
		if(t1.data == t2.data) {			// 找到两树匹配
			if(isSameTree(t1, t2)){
				return true;
			}
		}
		
		// 继续在r1的左子树和右子树里找匹配
		return isSubTree(t1.left, t2) || isSubTree(t1.right, t2);
	}
	
	// 判断两棵树是否相同
	public static boolean isSameTree(TreeNode t1, TreeNode t2) {
		if(t1==null && t2==null) {
			return true;
		}
		if(t1==null || t2==null) {
			return false;
		}
		
		if(t1.data != t2.data) {
			return false;
		}
		return isSameTree(t1.left, t2.left) && isSameTree(t1.right, t2.right);
	}
	
	public static void main(String[] args) {
		// t2 is a subtree of t1
		int[] array1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
		int[] array2 = {2, 4, 5, 8, 9, 10, 11};

		TreeNode t1 = AssortedMethods.createTreeFromArray(array1);
		TreeNode t2 = AssortedMethods.createTreeFromArray(array2);

		if (isSubTree(t1, t2))
			System.out.println("t2 is a subtree of t1");
		else
			System.out.println("t2 is not a subtree of t1");

		// t4 is not a subtree of t3
		int[] array3 = {1, 2, 3};
		TreeNode t3 = AssortedMethods.createTreeFromArray(array1);
		TreeNode t4 = AssortedMethods.createTreeFromArray(array3);

		if (isSubTree(t3, t4))
			System.out.println("t4 is a subtree of t3");
		else
			System.out.println("t4 is not a subtree of t3");
	}
}



 


python基础·练习1(字符串作业) python基础·练习1字符串作业一、填空二、编程初级中级 字符串作业 一、填空 1.已知s2 = ‘123’,则:s2 * 3 = ___________; s2 + str(456) = ___________; s2 = '123' print(s2 * 3) #123123123 print(s2 + str(456)) #123456 2.已知s1 = ‘123456789’。则: s1[:3] = ________; s1[-5:] =____________; s1[::2]=______; 阅读详情

相关推荐

VisionMaster图像源配置全攻略:从本地图片到相机SDK的保姆级教程

本文详细解析了VisionMaster图像源配置的三种主流方式:本地图片、相机直连和SDK集成。从像素格式选择到工业相机触发控制,再到SDK开发实战,提供全面的技术指导和避坑建议,帮助开发者高效实现图像处理应用的部署与优化。

yhn45678901的博客 778

Two trees, T1 and T2, are isomorphic if T1 can be transformed into T2 by swapping left and right chi

Two trees, and , are isomorphic if can be transformed into by swapping left and right children of (some of the) nodes in . For instance, the two trees in Figure 1 are isomorphic because they are the same if the children of A, B, and G, but not the other

linjianchu的博客 852

【科研学习】Demo3D2015安装包以及图文安装步骤

安装包 点击下图的.exe文件,安装 不需要解压,打开注册机 如下图: 点击上图的.exe文件,出现下图 先点击 patch 打开安装目录下的Demo3D.licensing.dll文件,然后点击Generate,生成dvt-license文件,保存即可 打开安装完成的Demo3D 2015(64-bit),一般破解没完成的,会出现一个request a license 的问题,点击find license 的那一行 点击后找到自己Generate,生成dvt

KaelCui的博客 1万+

二叉树--2-树的子结构--子树匹配

题目    输入两颗二叉树A,B,判断B是不是A的子结构。(PS:我们约定空树不是任意一个树的子结构)。思路    要查找树A中是否存在和树B结构一样的子树,我们可以分为两步:            第一步在树A中找到和B的根结点的值一样的结点R,            第二步再判断树A中以R为根节点的子树是不是包含和树B一样的结构。    使用递归的方法即可。注意    这道题目不能利用先序遍历...

ax_hacker的博客 1709

Office LTSC 2021/2024专业部署:ODT+config.xml标准化实战

Office部署本质上是企业终端软件生命周期管理的关键环节,其核心原理在于通过声明式配置驱动安装、激活与组件裁剪。Office Deployment Tool(ODT)作为微软官方命令行引擎,配合config.xml这一DSL契约文件,实现可版本控制、可审计、可回滚的自动化交付。该方案技术价值突出体现在稳定性保障(如LTSC长期支持通道)、合规性强化(不绕过授权机制)及运维提效(批量部署、离线支持)。典型应用场景覆盖教育机房批量装机、政企终端标准化、医疗HIS工作站部署等对功能冻结与系统确定性要求严苛的环境

diaocuiguo2493的博客 559

深信服 SANGFOR 设备密码恢复和配置备份恢复

、恢复密码 当我们拿到一台设备要去配置管理的时候,首先是要确认设备的登录IP,其次就是确认设备控制台登录密码。不知情的情况下如何找到设备的登录IP,请参考文档: http://bbs.sangfor.com.cn/forum.php?mod=viewthread&tid=9484 下文中提到的关于“网关升级客户端”的一些功能,也请参考此文档。 那么恢复密码,大家都知道有2种方法:U盘恢复密码、交叉线恢复密码。 1、U盘恢复密码 注意:仅恢复admin密码,不影响配置。 U盘恢复密码的前

李先生在闯荡江湖 1万+

每天一个算法之子树匹配

package ff; import java.util.Scanner; class BinaryTree{ int data; BinaryTree left; BinaryTree right; } public class isSubTree { static Scanner sc=new Scanner(System.in); public static

u012749168的博客 1463

3D iToF深度分辨率测量

本文展示了RGB-D传感器在三维测量中的高精度表现。标靶深度图显示其具备清晰、低噪、无干扰的特性,点云数据完整度高且轮廓分明。该技术已成功应用于物流(体积测量误差<1%)、工业(高反光部件装配检测)和农业(果蔬成熟度分级)等领域,验证了其硬件和算法的可靠性,能够满足不同场景下的三维测量需求。

dream it possible 252

树形地铁系统

题目 题目 思路 前两种是https://www.acwing.com/solution/content/4142/中读到的。 1 我们肯定是想要把两棵树的最小表示找出来,然后看看是否相同。 在这种情况下,我们期望是每个点在其子树内按最长链长度从大到小选择子节点进行DFS,但是如果相同呢?我们就要在链上干同样的事情,理论上我认为记忆性搜索应该可以到O(n2)O(n^2)O(n2),但我更认为我打不出这个代码。 2 上一种方法的优化,就是直接把子节点的最小表示求出来,然后子节点的最小表示再按字典序拼起来,然后

蒟蒻QMQ 200

Google Earth Engine 红树林制图方法的代码(三个模块)

谷歌地球引擎红树林制图方法(GEM)提供了一种直观、易用且可复制的工具,适用于广泛的非专业沿海管理者和决策者。该工具全面回顾并整合了相关的红树林遥感文献,并利用云计算的力量,包括简化的基于图像的潮汐校准方法。GEM 可免费用于非营利用途,并在 GEE 中运行,包含全面且详细注释的代码。GEM 专门设计用于绘制全球范围内多日期红树林分布并量化其动态变化。目前可用的工具和方法未能充分利用沿海管理者通常持有的丰富地方专业知识——GEM 致力于填补这一空白,帮助结合地方专业知识与 GEE 的云计算能力。

此星光明博客 559

YOLO11改进-注意力-引入Deformable Large Kernel Attention (DLKA) 解决多尺度、小目标、遮挡等问题

Deformable Large Kernel Attention (DLKA) 是一种用于视觉任务的注意力机制,旨在提升模型在处理不同尺寸和形状对象时的灵活性和性能。DLKA 的设计灵感源自传统的注意力机制,但通过引入可变形核(deformable kernel)来增强对局部特征的适应能力。

qq_64693987的博客 4042

树同构简单Hash法

DESCRIPTION: 给出两棵节点数相同的树,求其是否同构,还要输出可行解(节点的匹配关系)带spj。 input 16(n个节点) 12 4 4 13 13 5 13 14 4 8 8 3 8 6 3 15 12 10 15 1 4 9 4 2 2 7 12 16 1 11 7 6 6 2 2 10 2 11 6 9 9 14 9 8

雾腾腾 824

基于STM32的太阳能充电宝设计_资料编号31

系统硬件包括主控 STM32F103C8T6、0.96 OLED 显示屏、蜂鸣器、电源自锁开关、温度传感器 DS18B20、继电器、5 V DC 升压模块 、TB4056、18650锂电池、9 V太阳能板、稳压降压 5 V三极管。电源供应:锂电池为系统供电,9 伏太阳能板经 5 伏降压稳压三极管降压为 5 伏后传送到 TP4056,TP4056 为锂电池供电,因锂电池电压 3.7 伏,通过 5 伏 DC 升压模块升压到 5 伏为整个系统提供 5 伏电压。

嵌入式阿齐Archie 1万+

4-11 Isomorphic(判断两树同构)

Two trees, T1 and T2, are isomorphic if T1 can be transformed into T2 by swapping left and right children of (some of the) nodes in T1. For instance, the two trees in Figure 1 are isomorphic because they are the same if the children of A, B, and G, but not

wyx_601的博客 1470

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

lintcode子树

1.描述; 有两个不同大小的二进制树: T1 有上百万的节点; T2 有好几百的节点。请设计一种算法,判定 T2 是否为 T1的子树。  注意事项 若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树。也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同。 您在真实的面试中是否遇到过这个题? 

import_torch_as_tf 339

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

572.subtree-of-another-tree

给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。 示例 1: 输入:root = [3,4,5,1,2], subRoot = [4,1,2] 输出:true 示例 2: 输入:root = [3,4,5,1,2,null,null,null,null,0],

qq_26000415的博客 337

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

[BZOJ3197][Sdoi2013]assassin(树形DP+树同构+二分图最优匹配)

关于树同构,有一个神奇的性质: 一棵树的重心只有 111 个或 222 个,如果有 222 个(记为 uuu 和 vvv),那么一定有边 (u,v)(u,v)(u,v) ,而此时可以断开边 (u,v)(u,v)(u,v) ,新建一个节点,分别向 uuu 和 vvv 建边,这样新建的节点就是重心。上面所说的性质是:如果有两棵树,强制以重心为根,那么这两棵树同构当且仅当形成的两棵有根树同构。 而两...

女装的你,如此好看! 394

【树-简单】572. 另一棵树的子树

【题目】 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。 示例 1: 输入:root = [3,4,5,1,2], subRoot = [4,1,2] 输出:true 示例 2: 输入:root = [3,4,5,1,2,null,null,null,null,

... 138

leetcode: 另一个树的子树(暴力匹配,KMP,树hash)

给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。 一刷: class Solution: def isSubtree(self, s: TreeNode, t: TreeNode) -> bool: def help(s: TreeNo...

qqMiSa的博客 299

(245)LintCode 之判定 T2 是否为 T1的子树

题目:有两个不同大小的二叉树:T1有上百万的节点;T2有好几百的节点。请设计一种算法,判定T2是否为T1的子树。

qq_36464448的博客 517

树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

判断树T2是否为T1的子树

题目 你由两颗非常大的二叉树:T1,有几百万个节点;T2有几百个节点。 设计一个算法,判断T2是否为T1的子树。 如果T1有一个节点n,其子树与T2一模一样,则T2为T1的子树。也就是说,从节点n 处把树砍断,得到的树与T2完全相同。 分析 方法一:在规模较小且较简单的问题中,我们可以创建一个字符串,表示中序和前序遍历结果。若T2的前序遍历是T1前序遍历的子串,并且

指尖飞舞 1973

020给定两个二叉树T1,T2判断T1是否是T2的子树(keep it up)

给定两个二叉树T1,T2判断T1是否是T2的子树 首先在T2中查找T1的根节点,如果找不到, 则T1不是T2的子树,如果能找到,我们可以 遍历T1,检查T1的每个结点是否对应的存在T2 中。 代码: struct TreeNode { int data; TreeNode* leftChild; TreeNode* rightChild; }; bool isExited(co

yanziguilai的专栏 2193

判定 T2 是否为 T1的子树

有两个不同大小的二叉树:T1有上百万的节点;T2有好几百的节点,判定T2是否为T1的子树。 思路:假设T1是母树,T2是子树。遍历母树,找到T1节点与T2的根节点相同的点,如果找到的话。则继续遍历T1与T2,判断是否具有相同的结构,如果有相同的结构,则T2是T1的子树,返回tr...

229

判断t2树是否为t1树的子树(Java)

判断t2树是否为t1树的子树 (牛客网—牛客题霸算法篇—NC98) 题目描述 给定彼此独立的两棵二叉树,树上的节点值两两不同,判断 t1 树是否有与 t2 树完全相同的子树。 思路 Java实现 递归 要判断t2是否为t1的子树,那么就先在t1中找到t2的根节点,然后再进行遍历。 判断从当前节点的左右子树相不相同,如果一旦出现不同,那么立即返回false。 如果t2遍历完节点,t1也遍历完节点,则证明t2为t1的子树。 如果t1先遍历完节点,t2还没遍历完节点,那么则证明t2不是t1的子树。 在isCont

ln01010的博客 436

二叉树问题---判断t1树是否包含t2树全部的拓扑结构

#判断t1树是否包含t2树全部的拓扑结构 def isContain(t1, t2): def check(t1, t2): if not t2: return True if not t1 or t1.val != t2.val: return False return check(t1.lef

冰殇的博客 885
上一篇: Tree_Graph LCA(Lowest Common Ancestor) 最低公共节点 (BST或者一般树) @CareerCup
下一篇: Tree_Graph 打印所有和为定值的路径 @CareerCup
chiiis
博客等级 码龄14年 422粉丝 429原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值