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. 树的子结构(双重递归)相关推荐

  1. 剑指offer面试题26. 树的子结构(链表)

    题目描述 输入两棵二叉树A和B,判断B是不是A的子结构.(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值. 思路 详见链接 代码 class Solution ...

  2. 剑指offer——面试题26:复杂链表的复制

    剑指offer--面试题26:复杂链表的复制 Solution1: 小套路记住就行!!! 根据书上复杂度为O(n)O(n)O(n)的算法写的,此题加深了对于链表指针的理解与应用! /* struct ...

  3. [剑指offer]面试题26:复杂链表的复制

    面试题26:复杂链表的复制 题目:请实现函数ComplexListNodeClone(ComplexListNodepHead),复制一个复杂链表.在复杂链表中,每个结点除了有一个m_pNext指针指 ...

  4. 《剑指Offer》题目:树的子结构

    题目描述:树的子结构 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目分析:此题可以拆成两题,1.在二叉树中查找是否存在某个结点:2.判断两个二叉树是否 ...

  5. 剑指offer(C++)-JZ26:树的子结构(数据结构-树)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(我们约定空树不是任意一个树的子结构) ...

  6. 剑指offer面试题[26]-复杂链表的复制

    题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否 ...

  7. 剑指offer(17)树的子结构

    1. 从根节点开始判断,判断树root2是不是root1的子树.  2. 如果不是,再递归判断root2是不是root1.left的子树.  3. 如果第二步没成立,则再判断root2是不是root1 ...

  8. [Leedcode][第十题][剑指offer]面试题第[19]题[正则表达式][动态规划][递归][JAVA]

    [问题描述][困难] 请实现一个函数用来匹配包含'. '和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次).在本题中,匹配是指字符串的所有字符匹 ...

  9. 剑指Offer - 面试题24. 反转链表(遍历/递归)

    1. 题目 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4-&g ...

最新文章

  1. 我不懂,数学家为啥老跟驴过不去?
  2. 谷歌AI良心开源:一部手机就能完成3D目标检测,还是实时的那种
  3. 040_Unicode对照表六
  4. vrf名称_如何使用VRF(可验证随机函数)在以太坊上生成随机数
  5. WebX.0:Web1.0
  6. C语言 · 数位分离
  7. Study on Android【五】--自定义ContentProvider的语义
  8. 知识图谱中的关系推理
  9. [转载] Python大数据文本分析及应用
  10. 元胞自动机(又称细胞自动机)
  11. ios手机怎么连接adb命令_Mac连接Adb
  12. web前端面试高频考点——Vue面试题
  13. proteus仿真微型计算机,微机原理与接口技术——基于8086和Proteus仿真(第3版)...
  14. excel锁定前几行,无法选择和编辑
  15. uint16 java_java解析UINT16
  16. 大学语文复习详细资料
  17. 秋季吃哪些食物可以改善心情?
  18. 吐血总结~ 计算机网络基础汇总
  19. python-漫天星星turtle and random
  20. Java实现 LeetCode 93 复原IP地址

热门文章

  1. java futuretask 实例_java 使用Callable+FutureTask获取执行结果
  2. VMware Ubuntu 全屏问题解决
  3. Windows API GetProcAddress 及demo code
  4. java不规则算法_分布式id生成算法 snowflake 详解
  5. 【笔记目录1】【jessetalk 】ASP.NET Core快速入门_学习笔记汇总
  6. 对图片进行压缩,水印,伸缩变换,透明处理,格式转换操作
  7. moco-globalsettings
  8. 12 哈希表相关类——Live555源码阅读(一)基本组件类
  9. 通过 .NET Framework 中的 XPath 和 XSLT API 方便地操作 XML 数据
  10. 项目经理(project manager)刘小备的一天