Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions W5_1_level_order_traversal.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# 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

class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:

# Self-note: Do not declare a list, pop(0) in python is O(N)
q = deque()
results = []

if root is None:
return []

q.append(root)

while q:

level = []
size = len(q)
for i in range(0, size):

# do not use pop(0) with a list, O(n) time in python!
curr = q.popleft()
level.append(curr.val)

if curr.left:
q.append(curr.left)

if curr.right:
q.append(curr.right)

results.append(level)


return results

# Time complexity: O(n), we visist all the nodes once.
# Space complexity: O(n/4) = O(n), the leaf nodes (for a balance binary tree)
54 changes: 54 additions & 0 deletions W5_3_course_schedule.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
class Solution:
def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:

# Maintain a list
indegrees = [0] * numCourses

# Maintain a hashmap
outdegree_graph = {}

# We initialize the indegree by going over prerequisities and outdegrees by using a hashmap
for pre in prerequisites:
indegrees[pre[0]] = indegrees[pre[0]] + 1

if pre[1] not in outdegree_graph:
outdegree_graph[pre[1]] = []

outdegree_graph[pre[1]].append(pre[0])

q = deque()
count = 0

for i in range(0, numCourses):
if indegrees[i] == 0:
q.append(i)
count = count + 1

if count == numCourses:
return True

# if Queue is empty
if not q:
return False

while q:
curr = q.popleft()

# self-note: Do not use outdegree_graph.get[curr]
dependencies = outdegree_graph.get(curr)

if dependencies:
for dep in dependencies:
indegrees[dep] = indegrees[dep] - 1
if indegrees[dep] == 0:
q.append(dep)
count = count + 1

if count == numCourses:
return True

return False

# time complexity: O(v + e)
# space complexity: O(v + e)