题目传送门
思路:递归
c++
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution
{
public:
bool isSubtree(TreeNode* s, TreeNode* t) {
if (!s) return false;
return isSubtree(s->left, t) || SameTree(s, t) || isSubtree(s->right, t);
}
bool SameTree(TreeNode* s, TreeNode* t) {
if (s == nullptr && t == nullptr) return true;
if (s == nullptr || t == nullptr) return false;
return s->val == t->val && SameTree(s->left, t->left) && SameTree(s->right, t->right);
}
};
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution
{
public:
bool isOk(TreeNode* s,TreeNode* t)
{
if(s==NULL&&t!=NULL)
return false;
if(t==NULL&&s!=NULL)
return false;
if(s==NULL&&t==NULL)
return true;
if(s->val==t->val)
return isOk(s->left,t->left)&&isOk(s->right,t->right);
else
return false;
}
bool isTrue(TreeNode* s,TreeNode* t)
{
if(s==NULL&&t!=NULL)
return false;
if(t==NULL&&s!=NULL)
return false;
if(s==NULL&&t==NULL)
return true;
if(s->val==t->val)
return isOk(s,t)||isTrue(s->left,t)||isTrue(s->right,t);
else
return isTrue(s->left,t)||isTrue(s->right,t);
}
bool isSubtree(TreeNode* s, TreeNode* t)
{
if(s==NULL&&t!=NULL)
return false;
if(t==NULL&&s!=NULL)
return false;
if(s==NULL&&t==NULL)
return true;
return isTrue(s,t);
}
};
python
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isEqual(self,s,t):
if s==None and t==None:
return True
if s==None or t==None:
return False
return s.val==t.val and self.isEqual(s.left,t.left) and self.isEqual(s.right,t.right)
def isSubtree(self, s: TreeNode, t: TreeNode) -> bool:
if s==None and t==None:
return True
if s==None or t==None:
return False
return self.isEqual(s,t) or self.isSubtree(s.left,t) or self.isSubtree(s.right,t)