|
2 | 2 |
|
3 | 3 | // #Easy #Depth_First_Search #Tree #Binary_Tree #Hash_Function #String_Matching
|
4 | 4 | // #Algorithm_II_Day_7_Breadth_First_Search_Depth_First_Search
|
5 |
| -// #2022_08_10_Time_1_ms_(100.00%)_Space_47.2_MB_(13.44%) |
| 5 | +// #2024_10_11_Time_2_ms_(97.06%)_Space_44.2_MB_(68.85%) |
6 | 6 |
|
7 | 7 | import com_github_leetcode.TreeNode;
|
8 | 8 |
|
|
22 | 22 | * }
|
23 | 23 | */
|
24 | 24 | public class Solution {
|
25 |
| - private boolean isSubtreeFound(TreeNode root, TreeNode subRoot) { |
26 |
| - if (root == null && subRoot == null) { |
| 25 | + public boolean isSubtree(TreeNode root, TreeNode subRoot) { |
| 26 | + if (root == null) { |
| 27 | + return false; |
| 28 | + } |
| 29 | + if (traverse(root, subRoot)) { |
27 | 30 | return true;
|
28 | 31 | }
|
29 |
| - if (root == null || subRoot == null) { |
| 32 | + return isSubtree(root.left, subRoot) || isSubtree(root.right, subRoot); |
| 33 | + } |
| 34 | + |
| 35 | + private boolean traverse(TreeNode root, TreeNode subRoot) { |
| 36 | + if (root == null && subRoot != null) { |
30 | 37 | return false;
|
31 | 38 | }
|
32 |
| - if (root.val == subRoot.val) { |
33 |
| - return isSubtreeFound(root.left, subRoot.left) && isSubtree(root.right, subRoot.right); |
34 |
| - } else { |
| 39 | + if (root != null && subRoot == null) { |
35 | 40 | return false;
|
36 | 41 | }
|
37 |
| - } |
38 |
| - |
39 |
| - public boolean isSubtree(TreeNode root, TreeNode subRoot) { |
40 |
| - if (root == null && subRoot == null) { |
| 42 | + if (root == null) { |
41 | 43 | return true;
|
42 | 44 | }
|
43 |
| - if (root == null || subRoot == null) { |
| 45 | + if (root.val != subRoot.val) { |
44 | 46 | return false;
|
45 | 47 | }
|
46 |
| - return isSubtreeFound(root, subRoot) |
47 |
| - || isSubtree(root.left, subRoot) |
48 |
| - || isSubtree(root.right, subRoot); |
| 48 | + return traverse(root.left, subRoot.left) && traverse(root.right, subRoot.right); |
49 | 49 | }
|
50 | 50 | }
|
0 commit comments