From ab6bd5568ba32a807c48c6a70d314c68a8a8796e Mon Sep 17 00:00:00 2001 From: prenastro Date: Sat, 11 Jul 2026 04:18:31 -0700 Subject: [PATCH] Completed s30 BFS-1 --- Binarytreelevelordertraversal.py | 29 ++++++++++++++++++++++ courseschedule.py | 42 ++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 Binarytreelevelordertraversal.py create mode 100644 courseschedule.py diff --git a/Binarytreelevelordertraversal.py b/Binarytreelevelordertraversal.py new file mode 100644 index 00000000..efc6abcb --- /dev/null +++ b/Binarytreelevelordertraversal.py @@ -0,0 +1,29 @@ +from collections import deque + +class Solution: + def levelOrder(self, root): + if not root: + return [] + + res = [] + q = deque([root]) + + while q: + level = [] + size = len(q) + + for _ in range(size): + node = q.popleft() + level.append(node.val) + + if node.left: + q.append(node.left) + if node.right: + q.append(node.right) + + res.append(level) + + return res + + # TC - O(n) + # SC - O(n) \ No newline at end of file diff --git a/courseschedule.py b/courseschedule.py new file mode 100644 index 00000000..27706ab4 --- /dev/null +++ b/courseschedule.py @@ -0,0 +1,42 @@ +from collections import deque + +class Solution: + def canFinish(self, numCourses, prerequisites): + graph = {i: [] for i in range(numCourses)} + indegree = [0] * numCourses + + for course, prereq in prerequisites: + graph[prereq].append(course) + indegree[course] += 1 + + q = deque() + + for i in range(numCourses): + if indegree[i] == 0: + q.append(i) + + visited = 0 + + while q: + node = q.popleft() + visited += 1 + + for nei in graph[node]: + indegree[nei] -= 1 + + if indegree[nei] == 0: + q.append(nei) + + return visited == numCourses + + # TC - O(V+E) + # Build graph O(V) + # Build edges O(E) + # Initialize queue O(V) + # BFS O(V + E) + # Total TC O(V + E) + + # SC - O(V+E) + # Adjacency list: O(V + E) + # Indegree array: O(V) + # Queue: up to O(V) \ No newline at end of file