//1.若树2为空,那么无论树1是否为空,树2都是树1的子树,返回true
//2.若树2不为空,而树1为空,那么树2不可能是树1的子树,返回false
//3.在树1树2都不为空的时候,就分三种情况,
//  要么两棵树完全一样,用 issame(root1, root2)判断
//  要么树2属于树1的左子树,用递归判断 iscontains(root1->left, root2)
//  要么树2属于树1的右子树,用递归判断 iscontains(root1->right, root2)

#include<stdbool.h>
//  判断两棵树是否完全一样
bool IsSame(struct TreeNode* r1, struct TreeNode* r2){
    if(r1 == NULL && r2 == NULL)   
         return true;   //  两棵都是空树,肯定是一样的啦
    else if(r1 == NULL || r2 == NULL)   
         return false;   //只有一棵树是空树时,必定不是一样的了
    else if(r1->val != r2->val)  
         return false;   //两棵都不是空树,但值不一样,也不是same啦
    return IsSame(r1->left, r2->left) && IsSame(r1->right, r2->right);
        //递归判断左子树和右子树是否完全一毛一样,只有都为真时才是完全相同
} 
bool isContains(struct TreeNode* root1, struct TreeNode* root2 ) {
    if(root2 == NULL)   return true;
    else if(root1 == NULL)   return false;
    return isContains(root1->left, root2) || isContains(root1->right, root2)
           || IsSame(root1, root2);
}