We're getting back in touch with problem solving after a long-long time. I was _really really_ busy with family functions in this break.
Yesterday, I solved this LeetCode problem Subtree of Another Tree categorised as easy on LeetCode. I would say medium would have been a more appropriate categorisation of this recursively solvable problem.
Problem link: https://leetcode.com/problems/subtree-of-another-tree/
Solution Approach: Recursion
Time Complexity: O(n) where n is the number of nodes in the tree s.
Space Complexity: O(h) where h is the height of the tree s.
Solution:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public boolean isSubtree(TreeNode s, TreeNode t) { //Main logic boolean matchFound = false; //Base condition if (s == null && t == null) return true; if ((s!=null && t==null) || (s==null && t!=null)) return false; if (s.val == t.val) matchFound = matches (s, t); if (!matchFound) { matchFound = isSubtree(s.left, t); } if (!matchFound) { matchFound = isSubtree(s.right, t); } return matchFound; } private boolean matches (TreeNode s, TreeNode t) { if (s==null && t==null) return true; if ((s!=null && t==null) || (s==null && t!=null)) return false; if (s.val != t.val) return false; return matches(s.left, t.left) && matches(s.right, t.right); } }
That's all for now!
Happy Coding!!