另一个树的子树
给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。
bool func(struct TreeNode* p, struct TreeNode* q) {
//两树同时结束代表前边的节点全部相同
if (p == NULL && q == NULL) {
return true;
}
//有一个树先等于空,两树肯定不相同
if (p == NULL || q == NULL) {
return false;
}
//遍历所有节点
return p->val == q->val
&& func(p->left, q->left)
&& func(p->right, q->right);
}
bool isSubtree(struct TreeNode* s, struct TreeNode* t) {
if (t == NULL) { //空树是任何树的子树
return true;
}
if (s == NULL) { //空树不包含任何子树
return false;
}
if (func(s, t)) { //进入func判断是否相同,相同返回true
return true;
}
//遍历左右子树进入func判断是否相同
return isSubtree(s->left, t) || isSubtree(s->right, t);
}