import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root1 TreeNode类 
     * @param root2 TreeNode类 
     * @return bool布尔型
     */
    public boolean isContains (TreeNode root1, TreeNode root2) {
        // write code here
        //如果2是空的,返回true
        if(root2==null) return true;
        //如果1是空的,且2非空,返回false
        if(root1==null&&root2!=null) return false;
        //1和2都非空,递归判断
        if(isSameTree(root1,root2)) return true;
        return isContains(root1.left,root2)||isContains(root1.right,root2);
    }
    //递归函数判断两棵树是否相同
    public boolean isSameTree(TreeNode p1, TreeNode p2){
        //用DFS来遍历
        //两棵树都为空,相等
        if(p1==null&&p2==null) return true;
        //两棵树仅有一颗为空,不等
        if(p1==null||p2==null) return false;
        //两棵树都不为空,但值不同,不等
        if(p1.val!=p2.val) return false;
        return isSameTree(p1.left,p2.left)&&isSameTree(p1.right,p2.right);
    }
}