04.10. Check SubTree
Description
T1 and T2 are two very large binary trees, with T1 much bigger than T2. Create an algorithm to determine if T2 is a subtree of T1.
A tree T2 is a subtree of T1 if there exists a node n in T1 such that the subtree of n is identical to T2. That is, if you cut off the tree at node n, the two trees would be identical.
Example1:
Input: t1 = [1, 2, 3], t2 = [2] Output: true
Example2:
Input: t1 = [1, null, 2, 4], t2 = [3, 2] Output: false
Note:
- The node numbers of both tree are in [0, 20000].
Solutions
Solution 1: Recursion
First, we check if $t_2$ is null. If it is, then $t_2$ is definitely a subtree of $t_1$, so we return true
.
Otherwise, we check if $t_1$ is null. If it is, then $t_2$ is definitely not a subtree of $t_1$, so we return false
.
Next, we check if $t_1$ and $t_2$ are equal. If they are, then $t_2$ is a subtree of $t_1$, so we return true
. Otherwise, we recursively check if $t_1$'s left subtree is equal to $t_2$, and if $t_1$'s right subtree is equal to $t_2$. If either is true
, then $t_2$ is a subtree of $t_1$, so we return true
.
The time complexity is $O(n^2)$, and the space complexity is $O(n)$. Where $n$ is the number of nodes in $t_1$.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|