死磕算法·字符串问题】判断A中是否存在一棵子树与B树的拓扑结构完全相同·kmp算法应用

本文介绍了如何通过转化思路,将判断两棵二叉树是否存在同构子树的问题转化为字符串匹配问题,利用KMP算法进行解决。详细分析了在构建字符串时需要考虑节点的父子关系,并指出前序遍历和后序遍历的适用性,而中序遍历在此问题中不适用。
摘要由CSDN通过智能技术生成

题目大意:

对于两棵彼此独立的二叉树A和B,请编写一个高效算法,检查A中是否存在一棵子树与B树的拓扑结构完全相同。给定两棵二叉树的头结点A和B,请返回一个bool值,代表A中是否存在一棵同构于B的子树。

许多题目可以转化为字符串类型题目进行求解。此题判断A中是否有一棵拓扑结构和B相同的子树,可以遍历两棵树为两个字符串(这里遍历和普通前序/中序/后序遍历不同),再用KMP算法进行判断即可。

kmp算法可用来判断某字符串B是不是字符串A的子串,详见如何更好的理解和掌握 KMP 算法?

首先明确子树的定义:只要包含了一个结点,就得包含这个结点下的所有节点.

刚刚提到,这道题中遍历出来的字符串不能仅仅存储数字,还要存储这个节点是父节点还是子节点。


在这里插入图片描述
在这里插入图片描述
如果只看非空节点遍历结果,{1}包含在{1,2,4,5,3,6,7}中,后面一棵树应当是前面一棵树的子树才对。 但是第二棵树中1的两个子节点都为null,和前面树中1的两个节点不一致,不符合子树的定义。

因此

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值