题意
给两个二叉树s和t,判断t是否是s的一个子树
思路
直接递归就好。
首先,p和q分别指向s和t的根节点,如果两个值不等,就应该分别去s的左右子树继续查找。关键是相等的时候:如果判断其子树相同的话,那么成立。如果判断其子树不等,又应该分别去s的左右子树查找
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool dfs(TreeNode* s, TreeNode* t) {
if (!s || !t) return !s && !t;
if (s->val == t->val) return dfs(s->left, t->left) && dfs(s->right, t->right);
return false;
}
bool isSubtree(TreeNode* s, TreeNode* t) {
if (!s || !t) return !s && !t;
if (t->val == s->val) {
if (dfs(s->left, t->left) && dfs(s->right, t->right)) return true;
}
return isSubtree(s->left, t) || isSubtree(s->right, t);
}
};