JZ17:树的子结构

树的子结构

http://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88

  • 思路:
    先从根开始再把左作为根,再把右作为根由本函数决定。把一个为根的时候的具体比对过程是第二个函数决定。
    从根可以认为是一颗树,从左子树开始又可以认为是另外一颗树,从右子树开始又是另外一棵树。
    本函数就是判断这一整颗树包不包含树2,如果从根开始的不包含,就从左子树作为根节点开始判断,再不包含从右子树作为根节点开始判断。

      public class TreeNode{
          int value;
          TreeNode left;
          TreeNode right;
    
          public TreeNode(int val){
              this.value=val;
          }
      }
      //先从根开始再把左作为根,再把右作为根由本函数决定。把一个为根的时候的具体比对过程是第二个函数决定。
      //从根可以认为是一颗树,从左子树开始又可以认为是另外一颗树,从右子树开始又是另外一棵树。
      //本函数就是判断这一整颗树包不包含树2,如果从根开始的不包含,就从左子树作为根节点开始判断,
      //再不包含从右子树作为根节点开始判断。
      //是整体算法递归流程控制。
      public static boolean HasSubtree(TreeNode root1,TreeNode root2){
           if(root1==null || root2==null){
               return false;
           }
           return check(root1,root2) || HasSubtree(root1.left,root2) || HasSubtree(root1.right,root2);
      }
    
      //本函数,判断从当前的节点 ,开始两个树能不能对应上,是具体的比对过程
      public static boolean check(TreeNode root1,TreeNode root2){
          if(root2==null) {
              return true;
          }
          if(root1==null || root1.value!=root2.value){
              return false;
          }//如果根节点可以对应上,那么就去分别比对左子树和右子树是否对应上
          return check(root1.left,root2.left)&&check(root1.right,root2.right);
      }
剑指Offer题解 文章被收录于专栏

剑指Offer-Java版本题解

全部评论

相关推荐

Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务