[LeetCode]572. Subtree of Another Tree
题目描述
思路
对树s的每一个节点,都判断是否与树t是同一棵树
判断同一棵树使用深搜即可
代码
#include <iostream>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
bool isSubtree(TreeNode* s, TreeNode* t) {
if (s == NULL)
return t == NULL;
return isSameNode(s, t) || isSubtree(s->left, t) || isSubtree(s->right, t);
}
bool isSameNode(TreeNode* s, TreeNode* t) {
if (s == NULL)
return t == NULL;
if (t == NULL)
return false;
return s->val == t->val && isSameNode(s->left, t->left) && isSameNode(s->right, t->right);
}
};
int main() {
TreeNode *n1 = new TreeNode(3);
TreeNode *n2 = new TreeNode(4);
TreeNode *n3 = new TreeNode(5);
TreeNode *n4 = new TreeNode(1);
TreeNode *n5 = new TreeNode(2);
TreeNode *n6 = new TreeNode(0);
n1->left = n2, n1->right = n3;
n2->left = n4, n2->right = n5;
n5->left = n6;
TreeNode *s1 = new TreeNode(4);
TreeNode *s2 = new TreeNode(1);
TreeNode *s3 = new TreeNode(2);
s1->left = s2, s1->right = s3;
Solution s;
cout << s.isSubtree(n1, s1) << endl;
system("pause");
return 0;
}