判断是否为一棵树的子树 Subtree of Another Tree
为什么80%的码农都做不了架构师?>>>
问题:
Given two non-empty binary trees s and t, check whether tree t has exactly the same structure and node values with a subtree of s. A subtree of s is a tree consists of a node in s and all of this node's descendants. The tree s could also be considered as a subtree of itself.
Example 1:
Given tree s:
3/ \4 5/ \1 2
Given tree t:
4 / \1 2
Return true, because t has the same structure and node values with a subtree of s.
Example 2:
Given tree s:
3/ \4 5/ \1 2/0
Given tree t:
4/ \1 2
Return false.
解决:
① 给定两个树s和t,判断t是否是s的一个子树。这里s的子树是指,一个树由s中的一个节点及其所有子节点组成,s也可以是自己本身的一个子树。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution { //28ms
public boolean isSubtree(TreeNode s, TreeNode t) {
if(t == null) return true;
if(s == null) return false;
if(isSame(s,t)) return true;
return isSubtree(s.left,t) || isSubtree(s.right,t);
}
public boolean isSame(TreeNode s,TreeNode t){
if(s == null && t == null) return true;
if(s == null || t == null) return false;
if(s.val != t.val) return false;
return isSame(s.left,t.left) && isSame(s.right,t.right);
}
}
② 在discuss中看到以下解法
public class Solution { // 16ms
public boolean isSubtree(TreeNode s, TreeNode t) {
return isSubtree(s, t, true);
}
private boolean isSubtree(TreeNode s, TreeNode t, boolean isHead) {
if (s == null && t == null) return true;
if (s == null || t == null || (s.val != t.val && !isHead)) return false; //isHead表示是否以当前节点为根节点比较子树的
if (s.val == t.val) {
boolean left = isSubtree(s.left, t.left, false);
boolean right = isSubtree(s.right, t.right, false);
if (left && right) {
return true;
} else {
left = isSubtree(s.left, t, true);
right = isSubtree(s.right, t, true);
return left || right;
}
} else {
boolean left = isSubtree(s.left, t, true);
boolean right = isSubtree(s.right, t, true);
return left || right;
}
}
}
转载于:https://my.oschina.net/liyurong/blog/1506813
判断是否为一棵树的子树 Subtree of Another Tree相关推荐
- 判断一棵树是否是另一棵树的子树(Java实现)
前面一篇文章介绍了如何判断两棵树相等,思路就是遍历每个节点,然后判断是否均相等,需要用递归来实现.如果需要判断一棵树是另一棵树的子树,该怎么办呢?我们需要借助前面的思路,需要先判断两棵树相等,这里就是 ...
- 判断一棵树是否为另一棵树的子树
题目如下: 判断一棵树是否为另一棵树的子树 思路: (1)先构建两棵树,a树和b树,判断b树是否为a树的子树 (2)构建两个方法,一个用来判断传入的两棵树是否相同,为isSameTree:另一个用来判 ...
- 二叉树 判断一棵树是否是另一棵树的子树
题目:判断判断一棵树是否是另一棵树的子树,子树的意思是只要包含了一个结点,就得包含这个结点下的所有节点.意思就是二叉树结点的值也要相等 如下图2就是1的子树 如果将第二颗树根节点右孩子data改为2 ...
- 判断一棵树是否是另一棵树的子树 java实现
这是一个很经典的算法题,听起来好像挺难的,但是其实很简单.我觉得我们接触到的问题,并没有难题,只有复杂不复杂.一个再难的问题,也可以分解成一个个简单的问题,再将这些简单的问题交给不同的人去做就构成了一 ...
- 判断两个树是否相同判断一棵树是否是一棵树的子树
判断两棵树是否相同 方法:对两棵树同时做相同的递归判断其值或者是结构是否相同. 以下代码用的是前序遍历.递归方法(毕竟递归好理解而且代码少得可怜). 比较啰嗦的是指针为空的情况,只要把这些情况单独列出 ...
- 14.相同的树另一棵树的子树检查子树二叉树中的列表(教你们使用相同的套路快速解决这四道题)
一.相同的树 这道题是开胃菜的开始,使用递归进行解决 递归三部曲: 确定递归函数的参数和返回值 因为我们要比较的是两棵树是否相等,所以参数分别是两棵树的根节点,返回值为boolean类型,即两棵树是否 ...
- LeetCode Algorithm 572. 另一棵树的子树
572. 另一棵树的子树 Ideas 首先想到的就是递归判断两棵树的每一个节点是否相等,那么就需要将subRoot跟root的每一个节点构成的子树判断是否相同. 递归判断相等的逻辑比较简单,首先当前两 ...
- 另一棵树的子树(LeetCode)
给你两棵二叉树 root 和 subRoot .检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树.如果存在,返回 true :否则,返回 false . 二叉树 tree 的一 ...
- 572. 另一棵树的子树————简单
目录 题目 解题思路 Code 运行结果 题目 572. 另一棵树的子树 给你两棵二叉树 root 和 subRoot .检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树.如果 ...
- LeetCode另一棵树的子树
572. 另一棵树的子树 给你两棵二叉树 root 和 subRoot .检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树.如果存在,返回 true :否则,返回 false ...
最新文章
- 兵器工业计算机应用研究所刘培志,一种双目视觉立体匹配算法_2
- 使用Nginx自带的Realip模块获取用户真实IP
- diff 比较两个文件的差异
- Clojure:导入lein项目到IntelliJ IDEA
- javaweb入门--web是什么
- 会议通知|2019年全国高校大数据专业教学研讨与教师培训
- postgresql mysql数据类型_PostgreSQL和mysql数据类型对比兼容
- 目标检测(二十一)--FCN
- Python手册(Machine Learning)--statsmodels(TimeSeries)
- VBlog 纯前端博客 2018.5.15更新
- urllib.request.urlopen()出现的程序超时假死问题
- 多元线性回归及虚拟变量(哑变量)设置
- gas费用测试优化:hardhat-gas-reporter
- 什么是信贷风险控制?
- CSDN - CSDN27题解
- 如何理解PoW工作量证明?
- 关于大商创安装默认数据清空说明
- Stduino学习(二十六)水位传感器模块
- c语言程序怎么记忆,c语言的记忆方法指导
- 基于单片机的温控风扇
热门文章
- Java8 中的真的 Optional 很强大,你用对了吗?
- 国内外优秀音视频博客索引(持续更新)
- asp和php漏洞,ASP_实例分析ASP上传漏洞入侵实战及扩展,【上传漏洞欺骗技术】 - phpStudy...
- python魔法属性_python魔法方法-属性转换和类的表示详解
- cmw500综合测试仪使用_辽宁优质继电器综合测试仪供应商-广州炫通电气科技
- cmd怎么导入mysql文件,使用cmd工具如何导入大容量sql文件到mysql数据库
- 英特尔核显驱动hd630_英特尔发新处理器,换新 Logo,还把 AMD 吊打了一轮
- 安装Spark集群(在CentOS上)
- Scala For Java的一些参考
- [Mongodb]安装与启动