两个树是不是相同的树
bool isSameTree(struct TreeNode* p, struct TreeNode* q){
//其中一个为空
//都为空
//都不为空
if (p && !q){
return false;
}
if (!p && q){
return false;
}
if (!p && !q){
return true;
}
if (p->val == q->val){
return isSameTree(p->left, q->left) &&
isSameTree(p->right, q->right);
}
else{
return false;
}
}
一棵树是不是另一颗树的子树
bool IsSameTree(struct TreeNode* p, struct TreeNode* q){
if (!p && q){
return false;
}
if (!q && p){
return false;
}
if (!q && !p){
return true;
}
if (p->val == q->val){
return IsSameTree(q->left, p->left) && IsSameTree(q->right, p->right);
}
else{
return false;
}
}
bool isSubtree(struct TreeNode* s, struct TreeNode* t){
if (s == NULL){
return false;
}
//与根比较, 根相同, 且是同一结构, 返回 true
if (s->val == t->val && IsSameTree(s, t)){
return true;
}
// 与左右子树比较
return isSubtree(s->left, t) || isSubtree(s->right, t);
}