//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);
}