剑指Offer - 面试题26. 树的子结构(双重递归)
1. 题目
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
B是A的子结构, 即 A中有出现和B相同的结构和节点值。
例如:
给定的树 A:3/ \4 5/ \1 2
给定的树 B:4 /1
返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。示例 1:
输入:A = [1,2,3], B = [3,1]
输出:false示例 2:
输入:A = [3,4,5,1,2], B = [4,1]
输出:true限制:
0 <= 节点个数 <= 10000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 遍历A每个节点,值与 B 的 root 值相等的,开启再次递归 check
class Solution {bool found = false;
public:bool isSubStructure(TreeNode* A, TreeNode* B) {if(!A || !B) return false;if(A->val == B->val){found = check(A, B);if(found)return found;}isSubStructure(A->left,B);isSubStructure(A->right,B);return found;}bool check(TreeNode* A, TreeNode* B){if(found || !B || !A){if(found || !B)return true;return false;}if(A->val == B->val){return (check(A->left,B->left)&&check(A->right,B->right));}return false;}
};
- 优化:
return isSubStructure(A->left,B)||isSubStructure(A->right,B)
可以剪枝,找到后及时 return
class Solution {bool found = false;
public:bool isSubStructure(TreeNode* A, TreeNode* B) {if(!A || !B) return false;if(A->val == B->val){found = check(A, B);if(found)return found;} return isSubStructure(A->left,B)||isSubStructure(A->right,B);}bool check(TreeNode* A, TreeNode* B){if(found || !B || !A){if(found || !B)return true;return false;}if(A->val == B->val){return (check(A->left,B->left)&&check(A->right,B->right));}return false;}
};
剑指Offer - 面试题26. 树的子结构(双重递归)相关推荐
- 剑指offer面试题26. 树的子结构(链表)
题目描述 输入两棵二叉树A和B,判断B是不是A的子结构.(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值. 思路 详见链接 代码 class Solution ...
- 剑指offer——面试题26:复杂链表的复制
剑指offer--面试题26:复杂链表的复制 Solution1: 小套路记住就行!!! 根据书上复杂度为O(n)O(n)O(n)的算法写的,此题加深了对于链表指针的理解与应用! /* struct ...
- [剑指offer]面试题26:复杂链表的复制
面试题26:复杂链表的复制 题目:请实现函数ComplexListNodeClone(ComplexListNodepHead),复制一个复杂链表.在复杂链表中,每个结点除了有一个m_pNext指针指 ...
- 《剑指Offer》题目:树的子结构
题目描述:树的子结构 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目分析:此题可以拆成两题,1.在二叉树中查找是否存在某个结点:2.判断两个二叉树是否 ...
- 剑指offer(C++)-JZ26:树的子结构(数据结构-树)
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(我们约定空树不是任意一个树的子结构) ...
- 剑指offer面试题[26]-复杂链表的复制
题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否 ...
- 剑指offer(17)树的子结构
1. 从根节点开始判断,判断树root2是不是root1的子树. 2. 如果不是,再递归判断root2是不是root1.left的子树. 3. 如果第二步没成立,则再判断root2是不是root1 ...
- [Leedcode][第十题][剑指offer]面试题第[19]题[正则表达式][动态规划][递归][JAVA]
[问题描述][困难] 请实现一个函数用来匹配包含'. '和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次).在本题中,匹配是指字符串的所有字符匹 ...
- 剑指Offer - 面试题24. 反转链表(遍历/递归)
1. 题目 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4-&g ...
最新文章
- 我不懂,数学家为啥老跟驴过不去?
- 谷歌AI良心开源:一部手机就能完成3D目标检测,还是实时的那种
- 040_Unicode对照表六
- vrf名称_如何使用VRF(可验证随机函数)在以太坊上生成随机数
- WebX.0:Web1.0
- C语言 · 数位分离
- Study on Android【五】--自定义ContentProvider的语义
- 知识图谱中的关系推理
- [转载] Python大数据文本分析及应用
- 元胞自动机(又称细胞自动机)
- ios手机怎么连接adb命令_Mac连接Adb
- web前端面试高频考点——Vue面试题
- proteus仿真微型计算机,微机原理与接口技术——基于8086和Proteus仿真(第3版)...
- excel锁定前几行,无法选择和编辑
- uint16 java_java解析UINT16
- 大学语文复习详细资料
- 秋季吃哪些食物可以改善心情?
- 吐血总结~ 计算机网络基础汇总
- python-漫天星星turtle and random
- Java实现 LeetCode 93 复原IP地址
热门文章
- java futuretask 实例_java 使用Callable+FutureTask获取执行结果
- VMware Ubuntu 全屏问题解决
- Windows API GetProcAddress 及demo code
- java不规则算法_分布式id生成算法 snowflake 详解
- 【笔记目录1】【jessetalk 】ASP.NET Core快速入门_学习笔记汇总
- 对图片进行压缩,水印,伸缩变换,透明处理,格式转换操作
- moco-globalsettings
- 12 哈希表相关类——Live555源码阅读(一)基本组件类
- 通过 .NET Framework 中的 XPath 和 XSLT API 方便地操作 XML 数据
- 项目经理(project manager)刘小备的一天