【Java】 剑指offer(26) 树的子结构
本文参考自《剑指offer》一书,代码采用Java语言。
题目
输入两棵二叉树A和B,判断B是不是A的子结构。
思路
1)先对A树进行遍历,找到与B树的根结点值相同的结点R;
2)判断A树中以R为根结点的子树是否包含B树一样的结构。
测试算例
1.功能测试(A、B为普通二叉树;B是或者不是A树的子结构)
2.特殊测试(任意一个或者两个树的根结点为null;左斜树;右斜树)
Java代码
//题目:输入两棵二叉树A和B,判断B是不是A的子结构。
public class SubstructureInTree {
public class TreeNode{
double val;
TreeNode left = null;
TreeNode right =null;
public TreeNode(int val) {
this.val=val;
}
}
/*
* 主程序,对每个结点遍历判断
*/
public boolean hasSubtree(TreeNode root1,TreeNode root2) {
if(root1==null || root2==null)
return false;
// boolean result=false;
// if(equal(root1.val, root2.val)) {
// result = doesTree1HasTree2(root1, root2);
// if(!result)
// result=hasSubtree(root1.left, root2)
// ||hasSubtree(root1.right, root2);
// }
// return result;
//上面几行可以直接写成:
return doesTree1HasTree2(root1, root2)|| hasSubtree(root1.left, root2)
||hasSubtree(root1.right, root2);
}
/*
* 判断root结点开始的子树中各个结点是否相同
*/
private boolean doesTree1HasTree2(TreeNode root1,TreeNode root2) {
if(root2==null) return true;
if(root1==null) return false;
return equal(root1.val, root2.val) && doesTree1HasTree2(root1.left, root2.left)
&& doesTree1HasTree2(root1.right, root2.right);
}
/*
* 判断两个浮点数是否相等
*/
private boolean equal(double num1,double num2) {
if(num1-num2<0.0000001 && num1-num2>-0.0000001 )
return true;
return false;
}
}
收获
1.本题相当于对二叉树遍历的拓展,操作过程中,注意null的处理。
2.注意判断浮点数相等时有误差,不要直接用“==”判断。
【Java】 剑指offer(26) 树的子结构的更多相关文章
- 剑指 Offer 26. 树的子结构
剑指 Offer 26. 树的子结构 Offer 26 题目详情: 题解分析 解法一: 第一种比较容易想到的解法就是查看这两棵树的前序遍历和中序遍历序列是否都匹配. 因为前序遍历和中序遍历可以唯一确定 ...
- 剑指offer——26树的子结构
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题解: 注意,所谓的子结构,是树的形状和值相同,并非判断B是不是A的一部分[如果是这样,那就是 ...
- 剑指Offer:树的子结构【26】
剑指Offer:树的子结构[26] 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 解题思路 分为两步: 第一步:在树A中找到和树B的根节点的值一 ...
- 《剑指offer》 树的子结构
本题来自<剑指offer> 树的子结构 题目: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 思路: 分两步走: 第一步:判断根节点,两个根节 ...
- 【剑指Offer】树的子结构 解题报告(Python)
[剑指Offer]树的子结构 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目 ...
- 【剑指offer】树的子结构
转载请注明出处:http://blog.csdn.net/ns_code/article/details/25907685 剑指offer第18题,九度OJ上測试通过! 题目描写叙述: 输入两颗二叉树 ...
- Go语言实现:【剑指offer】树的子结构
该题目来源于牛客网<剑指offer>专题. 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) Go语言实现: type TreeNode stru ...
- 剑指Offer 17. 树的子结构 (二叉树)
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目地址 https://www.nowcoder.com/practice/6e196c44c7 ...
- 剑指offer:树的子结构
题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 解题思路: 同样考虑用递归来做. 利用两个递归函数,一个用于判断两棵树树否相等,另一个递归取A的 ...
随机推荐
- QMouseEvent鼠标事件
Qt中的QMouseEvent一般只涉及鼠标左键或右键的单击.释放等操作,而对鼠标滚轮的响应则通过QWheeEvent来处理
- 交叉熵的数学原理及应用——pytorch中的CrossEntropyLoss()函数
分类问题中,交叉熵函数是比较常用也是比较基础的损失函数,原来就是了解,但一直搞不懂他是怎么来的?为什么交叉熵能够表征真实样本标签和预测概率之间的差值?趁着这次学习把这些概念系统学习了一下. 首先说起交 ...
- HDU1233 还是畅通工程【最小生成树】
题意: 求出连接各个村庄最小的公路总长度,把最小公路总长度求出来. 思路: 最小生成树原理,带入数据求得. 代码: prim: #include<iostream> #include< ...
- pt-table-checksum检测不出主从差异处理
几个月前写过pt-table-checksum 3.0.4检测不出主从差异数据,当时的解决方案是使用旧版本,另一个挫方法是自行设置binlog_format='STATEMENT'.现在已经发布到3. ...
- 移动前端框架,require.js压缩
static css images 不同的页面可以新建不同的图片文件夹(可选) js libs 前端类库 plugs 插件 views 自己写的代码文件 sass/less l ...
- Linux mmc framework2:基本组件之queue
1.前言 本文主要介绍card下queue组件的主要流程,在介绍的过程中,将详细说明和queue相关的流程,涉及到其它组件的详细流程再在相关文章中说明. 2.主要数据结构和API 2.1 struct ...
- oracle 远程导入导出(本地win)
导出 exp hongtastock_account/hongtastock_account@192.168.1.22/orcl file=D:\hongta\hongtastock_account. ...
- 一步步实现windows版ijkplayer系列文章之七——终结篇(附源码)
一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...
- centos7和centos6.5环境rpm方式安装mysql5.7和mysql5.6详解
centos环境安装mysql5.7 其实不建议安装mysql5.7 语法和配置可能和以前的版本区别较大,多坑,慎入 1.yum方式安装(不推荐) a.安装mysql5.7 yum源 centos6: ...
- 将本地光盘做成yum源
环境:vmware 1.将centos6.5光盘挂载在虚拟机上 2.将光盘挂载在/mnt/cdrom目录下 root# mkdir /mnt/cdrom root # mount /mnt/cdro ...