diff --git a/bfs b/bfs new file mode 100644 index 00000000..ead261d7 --- /dev/null +++ b/bfs @@ -0,0 +1,45 @@ +/** + * Definition for a binary tree node. + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } + * } + */ + //TC On . SC On +class Solution { + public List> levelOrder(TreeNode root) { + + List> re = new ArrayList<>(); + Queue q = new LinkedList<>(); + if (root == null) + return re; + q.add(root); + while (!q.isEmpty()) { + + List li = new ArrayList<>(); + int size=q.size(); + for (int i = 0; i < size; i++) { + + TreeNode e = q.poll(); + + + if (null != e.left) + q.add(e.left); + if (null != e.right) + q.add(e.right); + li.add(e.val); + } + re.add(li); + + } + return re; + } +} diff --git a/courseSchedule b/courseSchedule new file mode 100644 index 00000000..5f9a62af --- /dev/null +++ b/courseSchedule @@ -0,0 +1,45 @@ +class Solution { + //TC / SC O(V+E) + public boolean canFinish(int numCourses, int[][] prerequisites) { + int[] indegree = new int[numCourses]; + HashMap> hm = new HashMap<>(); + //make indegree array and populate map + for (int[] pr : prerequisites) { + indegree[pr[0]]++; + hm.putIfAbsent(pr[1], new ArrayList<>()); + hm.get(pr[1]).add(pr[0]); + } + + //bfs + int count = 0; + Queue q = new LinkedList<>(); + for (int i = 0; i < numCourses; i++) { + + if (indegree[i] == 0) { + q.add(i); + count++; + } + } + + if (count == numCourses) + return true; + + while (!q.isEmpty()) { + + int curr = q.poll(); + List children = hm.get(curr); + if (null != children) { + for (int child : children) { + indegree[child]--; + if (indegree[child] == 0) { + q.add(child); + count++; + if (count == numCourses) + return true; + } + } + } + } + return false; + } +}