zoukankan      html  css  js  c++  java
  • 子结构和子树

    一 判断root2 是不是 root1 的子结构    空树不是任何树的子结构

    /**
    
      Step1.在树root1中找到和root2的根结点的值一样的结点R;
    
      Step2.判断树root1中以R为根结点的子树是不是包含和树root2一样的结构。
    
      很明显,这是一个递归的过程。
    */
    
    public class Solution {
        public boolean HasSubtree(TreeNode root1,TreeNode root2) {
            if(root2 == null || root1 == null) return false;
           
            return DoesTree1HasTree2(root1,root2)||HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2);
        }
        
       //判断root2是不是以root1根为起始的子结构
        public static boolean DoesTree1HasTree2(TreeNode root1,TreeNode root2){ 
            if (root2 == null)
                return true;   // 证明Tree2已经遍历结束,匹配成功
            if (root1 == null)
                return false;// 证明Tree1已经遍历结束,匹配失败
            if (root1.val != root2.val)
                return false;
            // 递归验证左子树和右子树是否包含Tree2
            return DoesTree1HasTree2(root1.left, root2.left) 
                  && DoesTree1HasTree2(root1.right, root2.right);
        }
    }

    二   判断root2 是不是 root1 的子树  

    子树就是树的其中一个节点以及其下面的所有的节点所构成的树。

    /**
      
      Step1.在树root1中找到和root2的根结点的值一样的结点R;
    
      Step2.判断树root1中以R为根结点的树是不和树root2一样。
    
      很明显,这是一个递归的过程。
    */
    public class Solution {
        public boolean isSubtree(TreeNode root1, TreeNode root2) {
            if(root1 == null) return false;
            return isSame(root1, root2) || isSubtree(root1.left, root2) || isSubtree(root1.right, root2);
        }
        public boolean isSame(TreeNode s, TreeNode t) {
            if(s == null && t == null) return true;
            if(s == null || t == null) return false;
            if(s.val != t.val) return false;
            return isSame(s.left, t.left) && isSame(s.right, t.right);
        }
    }   
  • 相关阅读:
    ABP框架系列之三:(Entity Framework Integration-实体框架集成)
    ABP框架系列之二:(Entity Framework Core-实体核心框架)
    ABP框架系列之一:(Entity-实体)
    MUI框架开发HTML5手机APP(一)--搭建第一个手机APP(转)
    树莓派安装mono
    【C#】VS2015开发环境的安装和配置(转)
    ABP框架
    WebApi系列~HttpClient的性能隐患(转)
    django中navie时间和aware时间详解
    js扩展运算符(spread)是三个点(...)
  • 原文地址:https://www.cnblogs.com/chengdabelief/p/7629438.html
Copyright © 2011-2022 走看看