Subtree of Another Tree

Problem

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`.

Solution

public class Solution {

    public boolean isSubtree(TreeNode s, TreeNode t) {
        if (s == null || t == null) return false; //Problem requires to return false as long as one of them is null
        return isSame(s, t) ? true : isSubtree(s.left, t) || isSubtree(s.right, t);
    }

    private boolean isSame(TreeNode s, TreeNode t) {
        if (s == null && t == null) return true;
        if (s == null || t == null) return false;
        return s.val == t.val && isSame(s.left, t.left) && isSame(s.right, t.right);
    }
}

Analysis

We use pre-order traversal in this solution
We start checking the entire nodes of s
Then we go checking s.left or s.right with t
Notice that isSame() has to check all nodes within two given trees
Complexity:

  • Time: O(n m)*, in worst case we have to traversal all nodes in two trees
  • Space: O(n), where n is the # of nodes in s tree. It happens when t is subtree of last node in s

results matching ""

    No results matching ""