剑指Offer:树的子结构

题目描述

  输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

解题思路

  实话实说这道题是剑指Offer前半部分难度比较大的,我们先来思考一个简单情况,如下图,左树枝叶比右树繁茂,但是枝干是相同的,不同的枝叶情况不一样

  

  此时,我们如何确定说根节点相同的左树包含右树呢?右树有的节点,我左树在对应位置都有!单反有一个节点值或位置不对,则说明左树不包含右树。我们成这个算法为F(X,Y)。

  我们再来考虑一种复杂情况,即左树存在多个和右树根节点相同的节点x1、x2....,此时我们以x1、x2....分别作为为根节点和右树进行F(X,Y)即可,只要有一个能够返回TRUE,则认为左树包含右树

  

  递归代码言简意赅,但是理解起来确实有点难度!?

Java题解

public class Solution {
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
if(root1==null||root2==null)
return false;
if(root1.val==root2.val&&isContain(root1,root2)){
return true;
}
return HasSubtree(root1.left,root2)||HasSubtree(root1.right,root2);
} /**
* 比较是否包含
* @param node1
* @param node2
* @return
*/
public boolean isContain(TreeNode node1, TreeNode node2){
//我为空,你不为空,说明我不包含你
if(node1==null&&node2!=null)
return false;
//咱俩都空,等于值相同
if(node2==null)
return true;
return node1.val == node2.val&& isContain(node1.left, node2.left) && isContain(node1.right, node2.right);
}
} /**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null; public TreeNode(int val) {
this.val = val; } }
*/

  

  

最新文章

  1. 第九章 springboot + mybatis + 多数据源 (AOP实现)(转载)
  2. 两排滚动js
  3. 初学java之接口基础
  4. ORACLE的分组统计之ROLLUP(一)
  5. HDU 1881
  6. 论i++与++i
  7. eclipse 查看快捷键
  8. Java基础语法<十一> 异常 断言 日志 调试
  9. Spring事务的传播行为和隔离级别
  10. 关于String中的不变模式
  11. Frame Stacking(拓扑排序)
  12. SpringMVC格式转化错误之HTTP Status [400] – [Bad Request]
  13. Failed to fetch URL http://dl-ssl.google.com/android/repository/addons_list-2.xml, reason:
  14. Node.js Error: Cannot find module express的解决办法
  15. 559. Maximum Depth of N-ary Tree
  16. tp框架设置404页面
  17. WARING
  18. 20162322 朱娅霖 作业005&006 栈,队列
  19. react小知识2
  20. 23种设计模式之原型模式(Prototype)

热门文章

  1. AC日记——Dylans loves tree hdu 5274
  2. 虚拟机centos 同一个tomcat、不同端口访问不同的项目
  3. awk 统计
  4. 51 NOD 1407 and and and and !!
  5. String,StringBuffer,StringBuilder源码分析
  6. Lucene 源码分析之倒排索引(一)
  7. project管理之makefile与自己主动创建makefile文件过程
  8. C++11中的原子操作(atomic operation)(转)
  9. 广告制胜无它,顺应人性尔——leo鉴书63
  10. mysql binlog配置详解