另一颗树的子树
程序员文章站
2022-03-05 14:48:51
...
给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。
解题思路:
先从跟结点开始,看两颗树的根节点是否相同,然后递归遍历两棵树的左右子树,如果都相同返回true;否则让树s左右子树分别和树t进行递归遍历,如果s树递归结束发现没有和树t相同的树则返回false。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool _isSubtree(struct TreeNode* s, struct TreeNode* t){
if(s == NULL && t == NULL)
return true;
else if(s == NULL && t != NULL)
return false;
else if(s != NULL && t == NULL)
return false;
else if(s->val != t->val)
return false;
return _isSubtree(s->left,t->left) && _isSubtree(s->right,t->right);
}
bool isSubtree(struct TreeNode* s, struct TreeNode* t){
if(s == NULL)
return false;
if(_isSubtree(s,t))
{
return true;
}
bool left = isSubtree(s->left,t);
bool right = isSubtree(s->right,t);
return left || right;
}