二叉树是否为子树的判断问题:

题目描述:

代码及注释:

 public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        if(root2==null)return false;//如果root2为null,则不是子树
        return process(root1,root2);

 }

//process函数是递归函数
boolean process(TreeNode root1,TreeNode root2){
        if (root2==null&&root1==null){
            /*
            ////*
             如果root2和root1都是空,说明的前面的路程完整的走完了并且没有结束函数,
             说明这颗子树是成立的
             */

            return true;
        }
        /*
        如果root2是空的,但是root1不空的,这时候也说明root1的路程root2成功走完了,则也返回true
         */
        if(root2==null)return true;

        //此处完全可以放到羡慕递归判断,但是如果此处的if去掉的话,一下代码会报nulexception的错误
        if (root1==null){
            return false;
        }

        //如果直相等,并且左右子树的值结构分别一样的话,则是子树,返回true
        if (root1.val==root2.val&&process(root1.left,root2.left)&&process(root1.right,root2.right)){
            return true;
        }

        //此处其实也能写成
        /*
            else{
                   return process(root1.left,root2)||process(root1.right,root2);
            }
         */
        //此为简化代码
        return process(root1.left,root2)||process(root1.right,root2);
    }

牛客标准答案:

public class Solution {
    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        if(root1==null&&root2==null) return true;
        if(root1==null) return false;
        if(root2==null) return true;
        if(root1.val==root2.val&&
           HasSubtree(root1.left, root2.left)&&
           HasSubtree(root1.right, root2.right))
            return true;
        return HasSubtree(root1.left, root2)||HasSubtree(root1.right,root2);
    }
}