递归
判断是否是子树需要分为两个步骤:
一、判断是否是子树
对每个s的节点si,有三种情况,其中一种情况成立则返回true
- 以si为根节点的子树 = t树
- 以si的左子树为根节点的子树 = t树
- 以si的右子树为根节点的子树 = t树
二、判断两个树是否相等
这个判断可以参考leetcode 101. 判断镜像树的步骤:
- 两边都不存在 true
- 一边不存在,一边存在 false
- 值不相等 false
- 值相等 判断左右子树是否相等
class Solution
{public:bool isSubtree(TreeNode *s, TreeNode *t){if (!s || !t)return false;return helper(s, t) || isSubtree(s->left, t) || isSubtree(s->right, t);}bool helper(TreeNode *s, TreeNode *t){if (!s && !t)return true;if ((!s && t) || (s && !t))return false;if (s->val == t->val)return helper(s->left, t->left) && helper(s->right, t->right);return false;}
};