|  | 
| 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 | 42 |         if (root == null && subRoot == 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