题目

给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。

示例 1:
给定的树 s:

示例 2:
给定的树 s:

思路

思路:首先层序遍历s树,如果遇到结点值和t根结点值相同的,开始比较以该结点为根结点的树与t树是否相同。
这里有一些点需要注意:
1、s树中可能有许多结点的值和t根结点值相同,所以我们应该对每次比较的结果做记录,如果有相同则直接返回true,否则必须等所有结点都遍历之后。
2、这一题用的比较两棵树是否相同的函数来源于这一题:
LeetCode 100. 相同的树 思考分析

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {public:bool isSameTree(TreeNode* p, TreeNode* q) {//如果两个结点存在if(p && q){//如果两个结点值相同,观察他们的左右子树是否同时相同if(p->val == q->val){return isSameTree(p->right,q->right) && isSameTree(p->left,q->left);}//如果两个结点值不同,说明树不相同else{return false;} }//如果两个结点同时不存在那么树相同else if(!p && !q){return true;}//如果一个树有此结点而另外一棵树没有此结点,则说明结构不同return false;}bool isSubtree(TreeNode* s, TreeNode* t) {queue<TreeNode*> que;bool result = false;int right_times=0;if(s!=NULL) que.push(s);while(!que.empty()){int size = que.size();for(int i =0;i<size;i++){TreeNode* node = que.front();que.pop();if(node->val == t->val){result = isSameTree(node,t);if(result == true) right_times++; if(right_times>0) return true;}//将左右孩子结点入队列,作为下一层的元素if(node->left) que.push(node->left);if(node->right) que.push(node->right);}}return false;}
};

看了一下官方题解,第一个思路应该是和我差不多的(判断子树是否相同都用的深度,不过一开始寻找相同结点我使用的是广度)

class Solution {public:bool check(TreeNode *o, TreeNode *t) {if (!o && !t) {return true;}if ((o && !t) || (!o && t) || (o->val != t->val)) {return false;}return check(o->left, t->left) && check(o->right, t->right);}bool dfs(TreeNode *o, TreeNode *t) {if (!o) {return false;}return check(o, t) || dfs(o->left, t) || dfs(o->right, t);}bool isSubtree(TreeNode* s, TreeNode* t) {return dfs(s,t);}
};

,后面的两个由于还没有学到相关知识,暂时先搁置。
另一个树的子树

LeetCode 572. 另一个树的子树 思考分析相关推荐

  1. LeetCode 572. 另一个树的子树(二叉树迭代器)

    1. 题目 给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树.s 的一个子树包括 s 的一个节点和这个节点的所有子孙.s 也可以看做它自身的一棵子树. 示例 1: ...

  2. leetcode 572. 另一个树的子树(Java版)

    题目 https://leetcode-cn.com/problems/subtree-of-another-tree/ 题解 方法一:深度优先搜索暴力匹配 /*** Definition for a ...

  3. leetcode学习打卡--572. 另一个树的子树(递归,二叉树遍历)

    572. 另一个树的子树 写在最前面,其实5月每日一题都做了,但是有时候没时间写博客就没记录了,唉最近越来越忙. 上题目上题目 给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构 ...

  4. leetcode题库572 -- 另一个树的子树

    给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树.s 的一个子树包括 s 的一个节点和这个节点的所有子孙.s 也可以看做它自身的一棵子树. 示例 1: 给定的树 ...

  5. 572. 另一个树的子树

    参考链接 t是s的子树有三种情况: t 和 s相等(t和s的根值相等,t的左子树与s的左子树相等且t的右子树与s的右子树相等) t 在s 的左子树里面 t在s 的右子树里面 class TreeNod ...

  6. 二叉树题目---3 另一个树的子树 AND 二叉树最大深度

    另一个树的子树 思路 两个数都遍历一遍,找到一个根结点相同时,判断以这个根结点为首的二叉树是否相等 前序遍历 判断两棵树是否相同 对于返回值的处理是难点 bool isSameTree(struct ...

  7. LeetCode另一棵树的子树

    572. 另一棵树的子树 给你两棵二叉树 root 和 subRoot .检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树.如果存在,返回 true :否则,返回 false  ...

  8. leetcode 236. 二叉树的最近公共祖先 思考分析

    目录 题目 思考分析 改进 本文章代码思路来源于公众号[代码随想录] 题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个 ...

  9. leetcode 122. 买卖股票的最佳时机 II 思考分析

    目录 题目 贪心法 题目 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时 ...

最新文章

  1. php json_encode后乱码,php json_encode 中文乱码的解决方法
  2. kibana升级之后原本保存的数据dashboards, visualizations, index patterns丢失
  3. HDU4390(容斥原理)
  4. linux下php、apache、mysql、curl环境搭建
  5. matlab读取xlsx文件,从电子表格读取数据
  6. Java集合之List的equals方法
  7. VCIX-NV学习指南
  8. 研究别人,能知道做什么赚钱,了解自己,能知道什么钱适合赚
  9. pandas--带有重复值的轴索引
  10. sql三表查询_滴滴SQL面试题解析:打车业务问题
  11. CoppeliaSim(V-rep)手册中文翻译
  12. openwrt信号弱掉线_QCA9880 openwrt 信号非常差
  13. android 源码编译apk,在Android源码里编译apk
  14. 基于物联网的温度采集系统(一):底层感知网络搭建
  15. 苹果手机咋用计算机,苹果手机怎么通过usb连接电脑上网
  16. VSCode JavaScript 代码格式化 美化 Beautify
  17. Android耳机耳机,Android 耳机插拔流程源码跟踪浅析
  18. Midjourney用户手册中文版详解模型、命令、参数与高级用法
  19. kali安装wps办公软件
  20. 用核显能跑matlab吗,5张图告诉你核显究竟能干嘛

热门文章

  1. vue学习经验分享,在这个大前端时代,你再不会vue就out啦
  2. linux eclipse svn插件安装,Linux上Eclipse安装SVN插件和安装JavaHL
  3. 从零开始学习前端开发 — 7、CSS宽高自适应
  4. js setTimeout和setInterval区别
  5. 深入学习jQuery选择器系列第六篇——过滤选择器之状态选择器
  6. margin折叠-从子元素margin-top影响父元素引出的问题
  7. CSS制作简单loading动画
  8. css 写打印样式问题
  9. layui 子页面写弹出框覆盖父页面,以及给弹框中的表单赋值
  10. kotlin访问控制符可见性