跳转至

572.Subtree of Another Tree

Tags: Easy `Tree``

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


Given two non-empty binary trees s and t, check whether tree t has exactly the same structure and node values with a subtree of s. A subtree of s is a tree consists of a node in s and all of this node's descendants. The tree s could also be considered as a subtree of itself.

Example 1: Given tree s:

     3
    / \
   4   5
  / \
 1   2

Given tree t:

   4 
  / \
 1   2

Return true, because t has the same structure and node values with a subtree of s.

Example 2: Given tree s:

     3
    / \
   4   5
  / \
 1   2
    /
   0

Given tree t:

   4
  / \
 1   2

Return false.


/**
 * 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 isSubtree(TreeNode* s, TreeNode* t) {
        std::ios_base::sync_with_stdio(false);
        cin.tie(NULL);
        cout.tie(NULL);

        if (!s) return false;
        if (isSame(s, t)) return true;
        return isSubtree(s -> left, t) || isSubtree(s -> right, t);
    }

    bool isSame(TreeNode *root, TreeNode *t)
    {
        if (!root && !t) return true;
        if ((!root && t) || (root && !t)) return false;
        if (root -> val != t -> val) return false;
        return isSame(root -> left, t -> left) && isSame(root -> right, t -> right);
    }
};