关于树(一般为二叉树),有两个不成文的结论:

  • (1)时间复杂度一般含有 logN\log N;
  • (2)执行的方式一般为递归,因为树的左子树、右子树仍然是一棵完整的树;

回到这个题目本身,要查找树 A 中是否存在和树 B 结构一样的子树,我们可以分为两步:

  • 1、在树 A 中找到和 B 的根节点的值一样的节点 R
  • 2 、再判断 A 中以 R 为根节点的子树是不是包含和树 B 一样的结构;
bool IsSubtree(BinaryTreeNode* root1, BinaryTreeNode* root2)
{bool flag = false;if (!root1 && !root2){if (root1->val == root2->val)flag = DoesTree1HaveTree2(root1, root2);if (!flag)flag = IsSubtree(root1->lft, root2);if (!flag)flag = IsSubtree(root1->rgt, roo2);}return flag;
}bool DoesTree1HasTree2(BinaryTreeNode* root1, BinaryTreeNode* root2)
{if (!root2)return true;// 突然胜利法if (!root1)return false;if (root1->val != root2->val)return false;// 突然死亡法return DoesTree1HasTree2(root1->lft, roo2->lft) && DoesTree1HasTree2(root1->rgt, root2->rgt);
}

递归有一种抽丝剥茧,层层深入的感觉,就像俄罗斯套娃,“想不想知道我这件衣服下面穿着什么”?

【剑指 offer】(十八)—— 树的子结构相关推荐

  1. 【剑指Offer】18树的子结构

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 时间限制:1秒:空间限制:32768K 解题思路 解题思路分为两步,主要用到了递归的方法.第一步先 ...

  2. 【剑指offer】登峰造极 -- 树的子结构

    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 热度指数:707017 本题知识点: 二叉树 算法知识视频讲解 题目描述 输入两棵二叉树A,B,判断B是不是A的 ...

  3. 《剑指offer》【树的子结构】(python版)

    题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 思路: 本题可以分为两步,第一步:找到A中与B的根结点值相等的结点R,第二步:判断以R为根结点的 ...

  4. 剑指offer十八之二叉树的镜像

    一.题目 操作给定的二叉树,将其变换为源二叉树的镜像.二叉树的镜像定义: 源二叉树 : 8/ \6 10/ \ / \5 7 9 11镜像二叉树:8/ \10 6/ \ / \11 9 7 5 二.思 ...

  5. 剑指offer 算法(树的两个节点的最低祖先)

    解析:先序遍历树,用两个链表保存遍历所走的路径,再求两个链表的最低公共结点 #include <stdio.h> #include <vector> #include < ...

  6. 【数据结构】剑指 Offer P200——八皇后问题的排列解法

      书中 P200 给出了不同于以往利用回溯法解决八皇后问题的思路,但是没有给出代码,下面对这种算法进行实现.   首先给出书中的解释: 由于 8 个皇后的任意两个均不能处于同一行,所以每一个皇后占据 ...

  7. 剑指offer十九之顺时针打印矩阵

    一.题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2, ...

  8. 剑指offer十二:数值的n次方

    题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. public class Solution {public double Po ...

  9. 剑指offer十:矩形覆盖

    题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 思路如下: 当第一次横着覆盖时,覆盖方法为f(n-2); 当 ...

  10. LeetCode 剑指 Offer II 前缀树(上) 专题总结

最新文章

  1. shell语法以及监控进程不存在重启
  2. 【程序员基础篇】开源中国私有库代码更新
  3. python基础菜鸟教程-菜鸟教程学习python
  4. 一款简洁大气的jquery日期日历插件
  5. workerman json mysql_workerman-json-rpc
  6. JMM设计原理之双重检查Lock
  7. eclipse hadoop开发环境配置
  8. Visual Studio 2019 离线注册方法记录
  9. 计算机无法读光盘,win10系统无法读取光盘如何解决 win10系统读取光盘失败的解决方法...
  10. jstl.jar和standar.jar包下载
  11. 图片标签及以图搜图场景应用
  12. ElasticSearch(8)-分布式搜索
  13. 云生态系统的构成、运行与平衡协作
  14. android双屏不同apk,双屏可折叠 通吃.exe和.apk 微软终于发大招了!
  15. python写数学公式大全_数学公式书写
  16. 侯捷C++视频资源全集 | 百度网盘下载
  17. 【Apple】用iphone,ipad看电脑上的视频
  18. openCV专栏(四):阀值处理+噪音滤波
  19. 微积分近似计算公式:中点、梯形、辛普森
  20. Microsoft Project 2010 32位官方版 打开后缀名.mpp

热门文章

  1. shell脚本中判断大于、小于、等于、不等于的符号
  2. 使用oracle创建表问题
  3. 有关i++问题,和一些另外的易错点
  4. unity 随机数_Unity 雨水滴到屏幕效果
  5. LeetCode33. 搜索旋转排序数组(二分查找)
  6. c++ class 类名 和 include 的区别
  7. 区分错误类型_形象解释 Python 新手最容易犯的错误
  8. js判断字符串是否在数组中
  9. Scrapy爬虫框架第五讲(linux环境)【download middleware用法】
  10. I - Destroy Walls (HDU - 6187)