1.给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。
2.代码展示
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool isSame(struct TreeNode* s, struct TreeNode* t)
{
if (s == NULL && t == NULL)
{
return true;
}
if (s == NULL || t == NULL)
{
return false;
}
if(s->val != t->val)
{
return false;
}
return isSame(s->left,t->left)&&isSame(s->right,t->right);
}
bool isSubtree(struct TreeNode* s, struct TreeNode* t)
{
if (s == NULL)
{
return false;
}
return isSame(s,t)||isSubtree(s->left,t)||isSubtree(s->right,t);
}
3.解题思路
首先是两个非空二叉树,所以当S为空时就返回false,S不是叶子结点时,我们就去判断它左右子树 的结构和数值是否和T的结构和数值相同,不相同就继续便利S的左右子树,直到结束。