题目描述

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
  1. package new_offer;
  2. /**
  3. * 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
  4. * 判断2是不是1的子结构
  5. * 此题我有一个没有考虑到的地方:以为只要两个节点相同就可以了
  6. * (节点是引用类型 不可以如此判断 需要将节点所包含的值及节点的子树的各个值进行比较)
  7. * @author Sonya
  8. *
  9. */
  10. /**
  11. public class TreeNode {
  12. int val = 0;
  13. TreeNode left = null;
  14. TreeNode right = null;
  15.  
  16. public TreeNode(int val) {
  17. this.val = val;
  18.  
  19. }
  20.  
  21. }
  22. */
  23. public class N17_HasSubtree {
  24.  
  25. public boolean HasSubtree(TreeNode root1,TreeNode root2) {
  26. boolean r=false;
  27. if(root2==null) return false;
  28. if(root1==null) return false;
  29. if(root1.val==root2.val) {
  30. r=judege1of2(root1,root2);
  31. }//如果有一个节点对应上 就继续判断下面是否都是满足的
  32. else if(root1.left!=null){
  33. r=HasSubtree(root1.left,root2);
  34. }
  35. else {
  36. r= HasSubtree(root1.right,root2);
  37. }
  38. return r;
  39. }
  40.  
  41. public static boolean judege1of2(TreeNode node1, TreeNode node2) {
  42. if (node2 == null) {
  43. return true;
  44. }
  45. if (node1 == null) {
  46. return false;
  47. }
  48. //如果其中有一个点没有对应上,返回false
  49. if (node1.val != node2.val) {
  50. return false;
  51. }
  52. //如果根节点对应的上,那么就分别去子节点里面匹配
  53. return judege1of2(node1.left,node2.left) && judege1of2(node1.right,node2.right);
  54. }
  55.  
  56. public static void main(String[] args) {
  57. // TODO Auto-generated method stub
  58. TreeNode t1,t2,t3,t4,t5,t6;
  59. t1=new TreeNode(1);t2=new TreeNode(2);t3=new TreeNode(3);
  60. t4=new TreeNode(4);t5=new TreeNode(5);t6=new TreeNode(6);
  61. t1.left=t2;t1.right=t3;
  62. t2.left=t4;t2.right=t5;
  63. t3.left=t3.right=null;
  64. t4.left=t6;t4.right=null;
  65. t5.left=t5.right=null;
  66. t6.left=t6.right=null;
  67. TreeNode s1,s2,s3;
  68. s1=new TreeNode(2);s2=new TreeNode(4);s3=new TreeNode(5);
  69. N17_HasSubtree n17=new N17_HasSubtree();
  70. boolean b1;
  71. b1=n17.HasSubtree(t2, s1);
  72. System.out.println(b1);
  73.  
  74. }
  75.  
  76. }

  

N17_判断树B是不是树A的子结构的更多相关文章

  1. 判断是否为AVL树

    时间复杂度:O(n) // 判断是否为AVL树 public int isAVL(TreeNode node) { if (node == null) { return 0; } int left = ...

  2. hdu 1325 判断有向图是否为树

    题意:判断有向图是否为树 链接:点我 这题用并查集判断连通,连通后有且仅有1个入度为0,其余入度为1,就是树了 #include<cstdio> #include<iostream& ...

  3. 笔试算法题(27):判断单向链表是否有环并找出环入口节点 & 判断两棵二元树是否相等

    出题:判断一个单向链表是否有环,如果有环则找到环入口节点: 分析: 第一个问题:使用快慢指针(fast指针一次走两步,slow指针一次走一步,并判断是否到达NULL,如果fast==slow成立,则说 ...

  4. 从B 树、B+ 树、B* 树谈到R 树

    从B 树.B+ 树.B* 树谈到R 树 作者:July.weedge.Frankie.编程艺术室出品. 说明:本文从B树开始谈起,然后论述B+树.B*树,最后谈到R 树.其中B树.B+树及B*树部分由 ...

  5. B树和B+树

    当数据量大时,我们如果用二叉树来存储的会导致树的高度太高,从而造成磁盘IO过于频繁,进而导致查询效率下降.因此采用B树来解决大数据存储的问题,很多数据库中都是采用B树或者B+树来进行存储的.其目的就是 ...

  6. 二叉树学习笔记之B树、B+树、B*树

    动态查找树主要有二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree), 红黑树 (Red-Black Tree ), 都是典型的 ...

  7. 浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树

    http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的 ...

  8. [转载]字典树(trie树)、后缀树

    (1)字典树(Trie树) Trie是个简单但实用的数据结构,通常用于实现字典查询.我们做即时响应用户输入的AJAX搜索框时,就是Trie开始.本质上,Trie是一颗存储多个字符串的树.相邻节点间的边 ...

  9. trie树(前缀树)

    问题描述:   Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优 ...

  10. 从B树、B+树、B*树谈到R 树

    从B 树.B+ 树.B* 树谈到R 树 作者:July.weedge.Frankie.编程艺术室出品. 说明:本文从B树开始谈起,然后论述B+树.B*树,最后谈到R 树.其中B树.B+树及B*树部分由 ...

随机推荐

  1. Working Experience - WPF XAML 报错 - 命名空间中不存在该名称

    问题 编辑 xaml 时,VS 提示一个存在的类不存在(如:命名空间"xxx"中不存在"xxx"名称). 运行环境 Windows 版本:Window 10 V ...

  2. qemu编译

    符号说明 $ 表示在用户模式下执行命令 # 表示在root模式下执行命令 ### 表示注释用于解释接下来一条命令的作用 更新环境源 设置阿里源 $ sudo mv /etc/yum.repos.d/C ...

  3. SPOJ SERGRID 【BFS】

    思路: 在一个方向上走K步,基础BFS. 注意标记: 注意路径: PS:显著注释是记录路径. #include<bits/stdc++.h> using namespace std; co ...

  4. MYSQL limit,offset 区别(转)

    SELECT keyword FROM keyword_rank WHERE advertiserid='59' order by keyword LIMIT 2 OFFSET 1; 比如这个SQL ...

  5. c#封装dll

    https://www.cnblogs.com/xingboy/p/10287425.html

  6. 洛谷P4004 Hello world!(分块+并查集)

    传送门 虽然洛谷数据水,然而咱最终还是没有卡过uoj上的毒瘤数据-- 神tm全uoj就3个人过了这题-- 首先,每个数最多被开根\(6\)次,开到\(1\)之后就别管它了,把它用并查集连到它父亲上 它 ...

  7. Codeforces 140E(排列组合、dp)

    要点 主要学到的东西:一个序列染色,相邻不染同色,恰用\(j\)种颜色的1.模式数.2.方案数.3.具体染色数. 从大的思路上来讲:先dp预处理出每一层的模式数:\(f[i][j]\)表示\(i\)个 ...

  8. 解读 iostat -mxd 1

    #### for AWR 报告 : 建议如下: 不能随便调整db_file_multiblock_read_count 值, 取同样时间段的AWR 报告 02:00 ~ 05:00,所以db_file ...

  9. thymeleaf中th:attr用法以及相关的thymeleaf基本表达式

    额,有人写的很好,我直接搬了 thymeleaf中th:attr用法 1.写死的单个属性值添加 th:attr="class=btn" 2.写死的多个属性值添加 th:attr=& ...

  10. Web.config文件 详解

    一.认识Web.config文件Web.config 文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NET Web 应用程序的身份验证方式), ...