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版本题解

全部评论

相关推荐

大方的大熊猫准备进厂:1.教育背景:你希望从事什么专业的工作你的主修课就是什么;成绩优秀是你应该做的,没什么可描述的,成绩不优秀也许人家在大学忙着创业呢?(成绩优秀不一定是好事,只能说明多元化的大学你上成了高中,没有真正上明白大学,反而体现了你死板,不爱社交,没有别的突出能力) 2.实践经历:你想表达的意思没有说清楚。你是说你会个性化服务,还是你有实习经历。如果没有带来,经济收益,表彰,更好的发展前景,那你还不如说说提升了自己哪些技能。你说有人给你送锦旗我都能明白你优秀,但是你说你会xxxx,你说这话谁信,证据呢。 3.入伍经历:你描述的就是你的工作职责或者你应该做的,并没有体现出来你把这个事情做好了,而且入伍经历并不能证明你能干好你要应聘的工作,不如只写经历其余所有内容都不写。 4.荣誉技能:重点突出一下,但不要过多描述,这些荣誉的含金量懂得都懂。 重点:你要应聘什么工作(具体岗位,实习生不具体),你的期望薪资
点赞 评论 收藏
分享
水墨不写bug:疑似没有上过大学
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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