Check Subtree
template<typename iter>
bool isEqual(iter main_start, vector<int> &nums) {
for (int i = 0; i < nums.size(); i++) {
if (*(main_start + i) != nums.at(i)) {
return false;
}
}
return true;
}
// testing if nums2 is subarray of nums1
bool isSubArray(vector<int> &main, vector<int> &nums) {
for (int j = 0; j < main.size() - nums.size() + 1; j++)
if (isEqual(main.begin() + j, nums))
return true;
return false;
}
void preOrderTrav(Node *root, vector<int> &ar) {
if (!root) {
ar.push_back(INT_MAX);
return;
}
ar.push_back(root->value);
preOrderTrav(root->left, ar);
preOrderTrav(root->right, ar);
}
bool isSubtree(Node *root1, Node *root2) {
vector<int> tree1, tree2;
preOrderTrav(root1, tree1);
preOrderTrav(root2, tree2);
print(tree1);
print(tree2);
return isSubArray(tree1, tree2);
}Last updated