Leetcode 572 Solution

This article provides solution to leetcode question 572 (subtree-of-another-tree)

https://leetcode.com/problems/subtree-of-another-tree

Solution

/**
 * 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 {
    bool ans;
public:
    bool isSameTree(TreeNode* s, TreeNode* t) {
        if (s == NULL && t == NULL)
            return true;

        if (s == NULL || t == NULL)
            return false;

        return s->val == t->val && isSameTree(s->left, t->left) && isSameTree(s->right, t->right);
    }

    int getTreeSum(TreeNode* t) {
        if (t == NULL)
            return 0;

        return (t->val + getTreeSum(t->left) * 2 + getTreeSum(t->right) * 3) % 15487039;
    }

    int traverseTree(TreeNode* s, TreeNode* t, int sum) {
        if (s == NULL || ans)
            return 0;

        int res = (s->val + traverseTree(s->left, t, sum) * 2 + traverseTree(s->right, t, sum) * 3) % 15487039;

        if (res == sum && isSameTree(s, t))
            ans = true;

        return res;
    }

    bool isSubtree(TreeNode* s, TreeNode* t) {
        ans = false;
        traverseTree(s, t, getTreeSum(t));
        return ans;
    }
};