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