zoukankan      html  css  js  c++  java
  • 树的子结构判断

    题目描述:输入两棵二叉树A,B,判断B是不是A的子结构(约定空树不是任意一棵树的子结构)

    思路:

    1.首先设置标志位result=false,因为一旦匹配成功,则将标志位置为真,如果匹配不成功,则默认返回false

    2.递归思想,若根节点相同,则递归调用DoseTree1hasTree2(),若根节点不同,则判断tree1的左子树和tree2是否相同,再判断tree1的右子树和tree2是否相同

    3.判断null的条件,当两棵树都不为空的时候才开始判断是否是子树。

    在DoseTree1hasTree2()中,当tree2遍历结束,则匹配成功,tree1为空有两种情况,1)仅1为空,则不匹配;2)两棵树都为空,则遍历成功。

    求解结果:

     1 /**
     2 public class TreeNode {
     3     int val = 0;
     4     TreeNode left = null;
     5     TreeNode right = null;
     6 
     7     public TreeNode(int val) {
     8         this.val = val;
     9 
    10     }
    11 
    12 }
    13 */
    14 public class Solution {
    15     public static boolean HasSubtree(TreeNode root1,TreeNode root2) {
    16         boolean result = false;
    17         //当两棵树都不为空的时候,才进行比较。否则直接返回false
    18         if(root1!=null&&root2!=null){
    19             //如果找到了对应Tree2的根节点的点
    20             if(root1.val == root2.val){
    21                 //以该跟节点为起点判断是否包含Tree2
    22                 result = doseTree1hasTree2(root1,root2);
    23             }
    24             //若没找到,则以Tree1的左子树和右子树来判断Tree2是否是其子树
    25             if(!result){
    26                 result = HasSubtree(root1.left,root2) || HasSubtree(root1.right,root2);
    27             }
    28         }
    29         //返回结果
    30         return result;
    31     }
    32     public static boolean doseTree1hasTree2(TreeNode node1,TreeNode node2){
    33         //若Tree2已经遍历完了,都能对应上,则返回True 
    34         if(node2==null)
    35             return true;
    36         //若Tree1已经遍历完了,而Tree2却没遍历完,则返回false
    37         if(node1==null)
    38             return false;
    39         //如果其中一个点没有对应上,则返回false
    40         if(node1.val!=node2.val)
    41             return false;
    42         //若根节点对应得上,则去其子节点中匹配
    43         return doseTree1hasTree2(node1.left,node2.left) && doseTree1hasTree2(node1.right,node2.right);
    44     }
    45 }
  • 相关阅读:
    SpringCloud系列——TX-LCN分布式事务管理
    SpringCloud系列——限流、熔断、降级
    SpringBoot系列——Logback日志,输出到文件以及实时输出到web页面
    常用的js、java编码解码方法
    WebSocket数据加密——AES与RSA混合加密
    使用Fiddler重定向App的网络请求
    C# 调用 taskkill命令结束服务进程
    Install .Net Core For CentOS
    cron表达式详解[转]
    WinServer远程部署系统打包批处理文件
  • 原文地址:https://www.cnblogs.com/10081-AA/p/10664570.html
Copyright © 2011-2022 走看看