diff --git a/Problem_1.py b/Problem_1.py new file mode 100644 index 00000000..88ee08d8 --- /dev/null +++ b/Problem_1.py @@ -0,0 +1,56 @@ +# 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 +from collections import deque + + +class Solution: + def levelOrder(self, root): + result = [] + if not root: + return result + q = deque() + q.append(root) + while q: + qSize = len(q) + temp = [] + for i in range(qSize): + front = q.popleft() + temp.append(front.val) + if front.left: + q.append(front.left) + if front.right: + q.append(front.right) + result.append(list(temp)) + return result + + +''' +DFS Code + +# 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.result = [] + self.dfs(root, 0) + return self.result + + def dfs(self, root, level): + if not root: + return + if level >= len(self.result): + self.result.append([root.val]) + else: + self.result[level].append(root.val) + self.dfs(root.left, level + 1) + self.dfs(root.right, level + 1) + +''' diff --git a/Problem_2.py b/Problem_2.py new file mode 100644 index 00000000..874ea51b --- /dev/null +++ b/Problem_2.py @@ -0,0 +1,28 @@ +from collections import deque + + +class Solution: + def canFinish(self, numCourses, prerequisites): + adj = [[] for _ in range(numCourses)] + indegree = [0] * numCourses + for a, b in prerequisites: + adj[b].append(a) + indegree[a] += 1 + + q = deque() + courseRemain = numCourses + + for idx, count in enumerate(indegree): + if count == 0: + q.append(idx) + + while q: + front = q.popleft() + courseRemain -= 1 + if courseRemain == 0: + return True + for node in adj[front]: + indegree[node] -= 1 + if indegree[node] == 0: + q.append(node) + return False