(输入两棵二叉树A和B,判断B是不是A的子结构。补充下,根据书中的代码来看,子结构的定义并不包括叶子节点下的null,也就是说只要B的存在数字的结构存在于A中就行,那么如果B是null树,那么就不属于A的子结构)

书中方法:书上的方法十分清晰,分为两个步骤,先在A树中找到B树的root.val,然后判断由该点向下是否完全包含B树的结构,直至遍历完A树。

	public boolean isChild(TreeNode aRoot, TreeNode bRoot){
//A树没有遍历完而且B树不为空
if(aRoot != null && bRoot != null){
//在当前节点检查结构,或者去遍历当前节点的左节点或右节点。
return isQualified(aRoot, bRoot)
|| isChild(aRoot.left, bRoot)
|| isChild(aRoot.right, bRoot);
}
//A树遍历完了或者B树是个null
return false;
} private boolean isQualified(TreeNode aRoot, TreeNode bRoot){
//检查到了B的末尾
if(bRoot == null)return true; //如果在检查完B之前A到了底
if(aRoot == null)return false; //都不是null且val相等,继续检查
if(aRoot.val == bRoot.val){
return isQualified(aRoot.left, bRoot.left)
&& isQualified(aRoot.right, bRoot.right);
} //都不是null但是val不等
return false; }

我的方法:开始检查一下B是否为空,空的话返回false(定义)。aRoot和bRoot是两个根节点,且都可能在自己的根节点和子节点之间转换。开头,如果aRoot.val和bRoot.val相等了,那么继续对各自的子节点进行对比;如果不相等则移动aRoot并和bRoot进行比较。

	public boolean isChildTree(TreeNode aRoot, TreeNode bRoot){
//定义,如果B树为空,返回false
if(bRoot == null){
return false;
}
return isChild2(aRoot, bRoot);
} private boolean isChild2(TreeNode aRoot, TreeNode bRoot){
//如果检查到了B的末尾
if(bRoot == null)return true; //A到了末尾但是B没有
if(aRoot == null)return false; //如果当前节点相同,进行进一步对比;
//对比的结果可能是false,此时继续向下检查aRoot.left与bRoot、aRoot.right与bRoot
if(aRoot.val == bRoot.val){
return (isChild2(aRoot.left, bRoot.left) && isChild2(aRoot.right, bRoot.right))
|| isChild2(aRoot.left, bRoot)
|| isChild2(aRoot.right, bRoot);
}else{//如果当前节点不同,继续向下检查aRoot.left与bRoot、aRoot.right与bRoot
return isChild2(aRoot.left, bRoot)
|| isChild2(aRoot.right, bRoot);
}
}

《剑指offer》面试题18 树的子结构 Java版的更多相关文章

  1. 剑指Offer:面试题18——树的子结构(java实现)

    问题描述: 输入两棵二叉树A和B,判断B是不是A的子结构.二叉树结点的定义如下: public class TreeNode { int val = 0; TreeNode left = null; ...

  2. 剑指Offer - 九度1520 - 树的子结构

    剑指Offer - 九度1520 - 树的子结构2013-11-30 22:17 题目描述: 输入两颗二叉树A,B,判断B是不是A的子结构. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每 ...

  3. 剑指Offer——回溯算法解迷宫问题(java版)

    剑指Offer--回溯算法解迷宫问题(java版)   以一个M×N的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍.设计程序,对任意设定的迷宫,求出从入口到出口的所有通路.   下面我们来详细讲一 ...

  4. 剑指offer面试题6 重建二叉树(java)

    注:(1)java中树的构建 (2)构建子树时可以直接利用Arrays.copyOfRange(preorder, from, to),这个方法是左开右闭的 package com.xsf.SordF ...

  5. 剑指Offer:面试题20——顺时针打印矩阵(java实现)

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

  6. 剑指offer面试题4 替换空格(java)

    注:利用java中stringBuilder,append,length方法很方便的解决字符串问题 /* * 剑指offer 替换空格 * xsf * */ /*开始替换空格的函数,length为原数 ...

  7. 剑指offer——面试题18.1:删除链表中重复的节点

    // 面试题18(二):删除链表中重复的结点 // 题目:在一个排序的链表中,如何删除重复的结点?例如,在图3.4(a)中重复 // 结点被删除之后,链表如图3.4(b)所示. #include &l ...

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

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目分析 分析如何判断树B是不是树A的子结构,只需要两步.很容易看出来这是一个递归的过程.一般在树 ...

  9. 【剑指Offer】17、树的子结构

      题目描述:   输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构)   解题思路:   要查找树A中是否存在和树B结构一样的子树,我们可以分为两步:第一步, ...

随机推荐

  1. 第一次接触oracle

    登录 SQLPLUS cmd sqlplus [用户名]/[密码][@数据库] [参数] sqlplus sys/orcl as sysdba -- 登录 sys 用户,必须指定 sysdba 或 s ...

  2. 正确重写hashCode方法

    https://blog.csdn.net/HD243608836/article/details/87367763 到这里,对象写完了,开始描述问题. 计算hashCode的注意事项: 1.不能包含 ...

  3. canvas合并两张图片

    解析: 原理是一样的 画多张图需要一张一张画 也就是等图片onload成功后处理 这里代码写的比较随意 实际用的时候可以小粉转一下 也非常简单.我懒~~ 么么.. newImage(text) { / ...

  4. JavaSE---泛型系统学习

    1.概述 1.1.泛型: 允许在   定义  类.接口.方法时  使用  类型形参,这个类型形参  将在声明变量.创建对象.调用方法时  动态地指定: 1.2.jdk5后,引入了  参数化类型(允许程 ...

  5. linux C++ 通讯架构(一)nginx安装、目录、进程模型

    nginx是C语言开发的,号称并发处理百万级别的TCP连接,稳定,热部署(运行时升级),高度模块化设计,可以用C++开发. 一.安装和目录 1.1 前提 epoll,linux内核版本为2.6或以上 ...

  6. [洛谷P4107] HEOI2015 兔子与樱花

    问题描述 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接,我们可以把它 ...

  7. 处理后台传过来的json数据-显示到微信小程序的富文本里

    解析数据: JSON.parse(); 获取 加密的文章内容, 将解密文章内容, 将解密后的img标签的路径换成绝对地址(服务器) 调整图片的大小,

  8. 不同地区Android开发者使用哪些设备测试APP?

    我们的团队密切关注着移动世界的趋势,以便可以提供所有有关变化的最紧密和最重要的信息.春天恰好是对app进行新一轮测试并检查其与不同Android设备兼容性如何的最佳时机.下面让我们一起来看看全世界范围 ...

  9. HDU 6616 Divide the Stones

    目录 题面 中文题意 比赛惨状 我的走不通的思路 \(m\)是偶数的情况 \(m\)是奇数的情况 题解的思路 另一些思路 源代码 题面 Time limit 3000 ms Memory limit ...

  10. Leetcode 12. Integer to Roman(打表,水)

    12. Integer to Roman Medium Roman numerals are represented by seven different symbols: I, V, X, L, C ...