Question

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.

Difficulty:Easy

Category:Tree

Analyze

Solution

// Runtime: 24ms
class Solution {
 public:
  bool isSubtree(TreeNode* s, TreeNode* t) {
    if (!s) return false;
    bool p = isSubtreeRoot(s, t);
    bool l = isSubtree(s->left, t);
    bool r = isSubtree(s->right, t);
    return p || l || r;
  }

 private:
  bool isSubtreeRoot(TreeNode* s, TreeNode* t) {
    if (!s && !t) return true;
    if (!s || !t) return false;
    if (s->val != t->val) return false;
    bool l = isSubtreeRoot(s->left, t->left);
    bool r = isSubtreeRoot(s->right, t->right);
    return l && r;
  }
};
By guozetang            Updated: 2020-09-19 13:02:30

results matching ""

    No results matching ""