From 957a20e378f7f1f9e0e96d42f9d3b539b2dbbb2c Mon Sep 17 00:00:00 2001 From: PrakarshKamal Date: Tue, 3 Mar 2026 17:56:15 -0500 Subject: [PATCH] Complete BFS-1 --- BTLevelOrderTraversal.java | 46 +++++++++++++++++++++++++++++++++++++ CourseSchedule.java | 47 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 BTLevelOrderTraversal.java create mode 100644 CourseSchedule.java diff --git a/BTLevelOrderTraversal.java b/BTLevelOrderTraversal.java new file mode 100644 index 00000000..999e4f3f --- /dev/null +++ b/BTLevelOrderTraversal.java @@ -0,0 +1,46 @@ +import java.util.*; + +// BFS O(n) time, O(n) space +class Solution { + public List> levelOrder(TreeNode root) { + List> ans = new ArrayList<>(); + if (root == null) { + return ans; + } + + Queue q = new LinkedList<>(); + q.offer(root); + + while (!q.isEmpty()) { + int size = q.size(); + List temp = new ArrayList<>(); + + for (int i = 0; i < size; i++) { + TreeNode curr = q.poll(); + temp.add(curr.val); + + if (curr.left != null) { + q.offer(curr.left); + } + if (curr.right != null) { + q.offer(curr.right); + } + } + ans.add(temp); + } + return ans; + } +} + +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; + } +} \ No newline at end of file diff --git a/CourseSchedule.java b/CourseSchedule.java new file mode 100644 index 00000000..514882d6 --- /dev/null +++ b/CourseSchedule.java @@ -0,0 +1,47 @@ +import java.util.*; + +// BFS Topological Sort O(V + E) time +class Solution { + public boolean canFinish(int numCourses, int[][] prerequisites) { + Map> map = new HashMap<>(); + int[] indegrees = new int[numCourses]; + + for (int[] pre : prerequisites) { // O(E) where E is edge, here E is all egdes which is prerequisites + int dependant = pre[0]; + int independant = pre[1]; + + indegrees[dependant]++; + map.putIfAbsent(independant, new ArrayList<>()); + map.get(independant).add(dependant); + } + + int count = 0; + Queue q = new LinkedList<>(); + for (int i = 0; i < numCourses; i++) { // O(V) where V is vertex + if (indegrees[i] == 0) { // it is independant course, its indegree[i] = 0 + q.offer(i); + count++; + } + } + + while (!q.isEmpty()) { // O(V + E) time since we only get particular E for that V (its not V * E) + int curr = q.poll(); + List dependencies = map.get(curr); + + if (dependencies != null) { + for (int dep : dependencies) { + indegrees[dep]--; + + if (indegrees[dep] == 0) { + q.offer(dep); + count++; + } + } + } + } + if (count == numCourses) { + return true; + } + return false; + } +} \ No newline at end of file