zoukankan      html  css  js  c++  java
  • 剑指offer系列15---树的子结构

    15【题目】输入两颗二叉树A,B,判断B是不是A的子结构。

    【思路】

      首先判断A头结点与B头结点是否相同,相同再调用doesTree1HaveTree2()比较A下一个左右结点值与B下一个左右结点值是否相同;
                        不相同再继续查找A的下一个结点与B的头结点是否相同;

                //A B头结点均相同,调用函数doesTree1HaveTree2(),继续比较A B剩下的结点是否相同

                //不相同,比较A下一个做结点与B头结点是否相同

                //A左结点与B头结点仍然不相同,比较A右节点与B结点值

     1 package com.exe3.offer;
     2 
     3 /**
     4  * 15【题目】输入两颗二叉树A,B,判断B是不是A的子结构。
     5  * @author WGS
     6  *
     7  */
     8 public class SubTree {
     9     public static class TreeNode{
    10         int val;
    11         TreeNode left=null;
    12         TreeNode right=null;
    13         public TreeNode(int n){
    14             this.val=n;
    15         }
    16         
    17     }
    18     //首先判断A头结点与B头结点是否相同,相同再调用doesTree1HaveTree2()比较A下一个左右结点值与B下一个左右结点值是否相同;
    19      //                             不相同再继续查找A的下一个结点与B的头结点是否相同;
    20     public boolean hasSubtree(TreeNode A,TreeNode B){
    21         boolean flag=false;
    22         if(A!=null && B!=null){
    23             //A B头结点均相同,调用函数doesTree1HaveTree2(),继续比较A B剩下的结点是否相同
    24             if(A.val==B.val) 
    25                 flag=doesTree1HaveTree2(A,B);
    26             //不相同,比较A下一个做结点与B头结点是否相同
    27             if(!flag)
    28                 flag=hasSubtree(A.left,B);
    29             //A左结点与B头结点仍然不相同,比较A右节点与B结点值
    30             if(!flag)
    31                 flag=hasSubtree(A.right,B);
    32         }
    33         return flag;
    34         
    35     }
    36     //
    37     public boolean doesTree1HaveTree2(TreeNode A,TreeNode B){
    38         if(B==null)        return true;
    39         if(A==null)        return false;
    40         if(A.val!=B.val)  return false;//头结点不同的话
    41         //头结点相同,再用递归比较A,B中左右结点是否依次相同
    42         return doesTree1HaveTree2(A.left,B.left)&&doesTree1HaveTree2(A.right,B.right);
    43         
    44     }
    45     public static void main(String[] args){
    46         TreeNode A1=new TreeNode(8);
    47         TreeNode A2=new TreeNode(8);
    48         TreeNode A3=new TreeNode(7);
    49         TreeNode A4=new TreeNode(9);
    50         TreeNode A5=new TreeNode(2);
    51         TreeNode A6=new TreeNode(4);
    52         TreeNode A7=new TreeNode(7);
    53         A1.left=A2;
    54         A1.right=A3;
    55         A2.left=A4;
    56         A2.right=A5;
    57         A5.left=A6;
    58         A5.right=A7;
    59         
    60         TreeNode B1=new TreeNode(8);
    61         TreeNode B2=new TreeNode(9);
    62         TreeNode B3=new TreeNode(2);
    63         B1.left=B2;
    64         B1.right=B3;
    65         boolean flag=new SubTree().hasSubtree(A1, B1);
    66         System.out.println(flag);
    67     }
    68 }
  • 相关阅读:
    Tomcat部署web项目,虚拟目录,上下文(Context),WEB-INF,web.xml,servlet,404
    Android异常:唤醒锁未授权。(Caused by: java.lang.SecurityException: Neither user 10044 nor current process has android.permission.WAKE_LOCK.)
    .hiverc
    Hive安装
    搭建Kafka开发环境
    java实现Kafka的消费者示例
    java实现Kafka生产者示例
    Kafka集群部署
    kafka介绍
    Pig UDF 用户自定义函数
  • 原文地址:https://www.cnblogs.com/noaman/p/5420824.html
Copyright © 2011-2022 走看看