diff --git a/Problem1.py b/Problem1.py new file mode 100644 index 00000000..a89fef8f --- /dev/null +++ b/Problem1.py @@ -0,0 +1,68 @@ +# https://leetcode.com/problems/binary-tree-level-order-traversal/ + +# BFS solution +# Time Complexity: O(n) +# Space Complexity: O(h) +# Did this code successfully run on Leetcode : Yes +# Any problem you faced while coding this : No + +# 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]]: + if not root: + return [] + q = deque() + res = [] + + q.append(root) + while len(q) > 0: + size = len(q) + new_list = [] + + for i in range(size): + qroot = q.popleft() + new_list.append(qroot.val) + + if qroot.left is not None: + q.append(qroot.left) + + if qroot.right is not None: + q.append(qroot.right) + + res.append(new_list) + + return res + + +# DFS Solution + +# 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]]: + if not root: + return [] + self.res = [] + self.helper(root, 0) + return self.res + + def helper(self, root, depth): + if root is None: + return + if depth == len(self.res): + new_list = [] + self.res.append(new_list) + + self.res[depth].append(root.val) + + self.helper(root.left, depth + 1) + self.helper(root.right, depth + 1) \ No newline at end of file diff --git a/Problem2.py b/Problem2.py new file mode 100644 index 00000000..bdbc5f11 --- /dev/null +++ b/Problem2.py @@ -0,0 +1,38 @@ +# https://leetcode.com/problems/course-schedule/description/ + +# Time Complexity: O(V+E) +# Space Complexity: O(n) + +class Solution: + def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool: + q = deque() + adj_list = defaultdict(list) + indegrees = [0] * numCourses + count = 0 + + for item in prerequisites: + indegrees[item[0]] += 1 + adj_list[item[1]].append(item[0]) + + for i in range(len(indegrees)): + if indegrees[i] == 0: + q.append(i) + count += 1 + + while q: + qroot = q.popleft() + popped_list = adj_list[qroot] + for i in popped_list: + indegrees[i] = indegrees[i] - 1 + if indegrees[i] == 0: + q.append(i) + count += 1 + + if count != numCourses: + return False + + # for i in indegrees: + # if i != 0: + # return False + + return True \ No newline at end of file