From 22b25bfae3cab462460983392382add54816ce19 Mon Sep 17 00:00:00 2001 From: "M.Hitesh" <54840773+hiteshmadapathi@users.noreply.github.com> Date: Sat, 12 Mar 2022 21:04:50 -0700 Subject: [PATCH 1/5] Create level order travesal.py --- level order travesal.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 level order travesal.py diff --git a/level order travesal.py b/level order travesal.py new file mode 100644 index 00000000..e51cddfd --- /dev/null +++ b/level order travesal.py @@ -0,0 +1,21 @@ +# Time Complexity - O(n) +# Space Complexity - O(n) +class Solution: + def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: + if root==None: + return None + q = deque() + q.append(root) + result = [] + while len(q)!=0: + size = len(q) + temp = [] + for i in range(size): + curr = q.popleft() + temp.append(curr.val) + if curr.left!=None: + q.append(curr.left) + if curr.right!=None: + q.append(curr.right) + result.append(temp) + return result From 7961c5ef14fbc6ec465b39e96ef9f5f72b131ade Mon Sep 17 00:00:00 2001 From: "M.Hitesh" <54840773+hiteshmadapathi@users.noreply.github.com> Date: Mon, 25 May 2026 11:41:37 -0700 Subject: [PATCH 2/5] Delete level order travesal.py --- level order travesal.py | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 level order travesal.py diff --git a/level order travesal.py b/level order travesal.py deleted file mode 100644 index e51cddfd..00000000 --- a/level order travesal.py +++ /dev/null @@ -1,21 +0,0 @@ -# Time Complexity - O(n) -# Space Complexity - O(n) -class Solution: - def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: - if root==None: - return None - q = deque() - q.append(root) - result = [] - while len(q)!=0: - size = len(q) - temp = [] - for i in range(size): - curr = q.popleft() - temp.append(curr.val) - if curr.left!=None: - q.append(curr.left) - if curr.right!=None: - q.append(curr.right) - result.append(temp) - return result From 7af1bd87889aa1ae3ca7af1f5b75930f7a5beb24 Mon Sep 17 00:00:00 2001 From: "M.Hitesh" <54840773+hiteshmadapathi@users.noreply.github.com> Date: Mon, 25 May 2026 11:59:12 -0700 Subject: [PATCH 3/5] Add level order traversal method to Solution class Implement level order traversal for a binary tree. --- Problem1.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Problem1.py diff --git a/Problem1.py b/Problem1.py new file mode 100644 index 00000000..aeee25c3 --- /dev/null +++ b/Problem1.py @@ -0,0 +1,29 @@ +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right + +# Time Complexity --> O(n) where n is the number of nodes +# Space Complexity --> O(n/2) +from collections import deque +class Solution: + def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: + if root is None: + return [] + q = deque() + q.append(root) + result = [] + while q: + size = len(q) + temp = [] + for i in range(size): + curr = q.popleft() + temp.append(curr.val) + if curr.left is not None: + q.append(curr.left) + if curr.right is not None: + q.append(curr.right) + result.append(temp) + return result From d68d61a3531f66eaff063d27479c0d6c1ef4dfc5 Mon Sep 17 00:00:00 2001 From: "M.Hitesh" <54840773+hiteshmadapathi@users.noreply.github.com> Date: Mon, 25 May 2026 12:04:29 -0700 Subject: [PATCH 4/5] Implement level order traversal using DFS --- Problem1.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/Problem1.py b/Problem1.py index aeee25c3..e96d3b15 100644 --- a/Problem1.py +++ b/Problem1.py @@ -7,6 +7,7 @@ # Time Complexity --> O(n) where n is the number of nodes # Space Complexity --> O(n/2) +# Approach --> BFS from collections import deque class Solution: def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: @@ -27,3 +28,36 @@ def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: q.append(curr.right) result.append(temp) return result + +''' +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right + +# Time Complexity --> O(n) where n is the number of nodes +# Space Complexity --> O(logn) which is the recursive stack size(height of the tree) +# Approach --> DFS +class Solution: + def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: + self.result = [] + self.helper(root, 0) + return self.result + + def helper(self, root, level): + # base + if root is None: + return + + # logic + if len(self.result)==level: + self.result.append([]) + self.result[level].append(root.val) + + self.helper(root.left, level+1) + self.helper(root.right, level+1) + + +''' From 10384f035396f36234ddea708fe5aae27909c276 Mon Sep 17 00:00:00 2001 From: "M.Hitesh" <54840773+hiteshmadapathi@users.noreply.github.com> Date: Mon, 25 May 2026 13:25:05 -0700 Subject: [PATCH 5/5] Add course scheduling solution in Problem2.py Implement a solution to determine if all courses can be finished based on prerequisites using a graph traversal approach. --- Problem2.py | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Problem2.py diff --git a/Problem2.py b/Problem2.py new file mode 100644 index 00000000..0cc6f80c --- /dev/null +++ b/Problem2.py @@ -0,0 +1,39 @@ +# Time Complexity --> O(V + E) where v is the number of vertices or courses and E is the number of edges or dependencies +# Space Complexity --> O(V + E) +class Solution: + def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool: + + hmap = {} + indegree = [0 for i in range(numCourses)] + for prereq in prerequisites: + if prereq[1] not in hmap: + hmap[prereq[1]] = [] + hmap[prereq[1]].append(prereq[0]) # Independent(Prereq) to Dependent mapping + indegree[prereq[0]] += 1 # keep track of indegree + + q = deque() + count = 0 + for i in range(len(indegree)): + if indegree[i]==0: + q.append(i) + count += 1 + + if count==numCourses: # If there are no courses with prereqs then return true + return True + if len(q)==0: # If there are no courses with 0 prereqs, then it is a cyclic graph and return False + return False + + # Start with the independent courses and then look over all their dependent courses, reduce each of indegree by 1 and if all the indegrees get to 0 then return True + while q: + curr = q.popleft() + if curr in hmap and len(hmap[curr])>0: + for course in hmap[curr]: + indegree[course] -= 1 + if indegree[course]==0: + q.append(course) + count += 1 + if count==numCourses: + return True + return False + +