From fe978cef3699ac324a3fcf864de6d6aaff7af5d6 Mon Sep 17 00:00:00 2001 From: Sristi Ingleshwar Date: Tue, 9 Dec 2025 19:40:34 -0600 Subject: [PATCH] done BFS-1 --- BinaryTreeLevelOrderTraversal.java | 67 ++++++++++++++++++++++++++++++ CourseSchedule.java | 55 ++++++++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 BinaryTreeLevelOrderTraversal.java create mode 100644 CourseSchedule.java diff --git a/BinaryTreeLevelOrderTraversal.java b/BinaryTreeLevelOrderTraversal.java new file mode 100644 index 00000000..7558d528 --- /dev/null +++ b/BinaryTreeLevelOrderTraversal.java @@ -0,0 +1,67 @@ +/** + * 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; + * } + * } + */ +// class Solution { +// List> result = new ArrayList<>(); +// public List> levelOrder(TreeNode root) { +// // dfs - recursive +// helper(root, 0); +// return result; +// } + +// private void helper(TreeNode root, int level) +// { +// if(null == root) return; +// if(level == result.size()) +// { +// result.add(new ArrayList<>()); +// } +// result.get(level).add(root.val); +// helper(root.left, level+1); +// helper(root.right, level+1); +// } +// } + +class Solution { + public List> levelOrder(TreeNode root) { + // bfs + if(null == root) return new ArrayList<>(); + Queue queue = new LinkedList<>(); + queue.add(root); + List> result = new ArrayList<>(); + + while(!queue.isEmpty()) + { + int size = queue.size(); + List list = new ArrayList<>(); + for(int i = 0; i < size; i++) + { + TreeNode newNode = queue.poll(); + list.add(newNode.val); + if(null != newNode.left) + { + queue.add(newNode.left); + } + if(null != newNode.right) + { + queue.add(newNode.right); + } + } + result.add(list); + } + + return result; + } +} \ No newline at end of file diff --git a/CourseSchedule.java b/CourseSchedule.java new file mode 100644 index 00000000..471250cc --- /dev/null +++ b/CourseSchedule.java @@ -0,0 +1,55 @@ + +class CourseSchedule { + public boolean canFinish(int numCourses, int[][] prerequisites) { + // use - adjacency matrix of independent(b) and dependent(a) - map + // and indegree array for each vetex/course + // and use queue to track completing courses with no or prerequisites finished + + Map> map = new HashMap<>(); + int[] indegree = new int[numCourses]; + for(int i = 0; i < prerequisites.length; i++) + { + int inde = prerequisites[i][0]; + int dep = prerequisites[i][1]; + if(!map.containsKey(inde)) + { + map.put(inde, new ArrayList<>()); + } + map.get(inde).add(dep); + indegree[dep]++; + } + Queue queue = new LinkedList<>(); + int count = 0; + for(int i = 0; i < numCourses; i++) + { + if(0 == indegree[i]) + { + queue.add(i); + count++; + } + } + if(0 == count) return false; + if(numCourses == count) return true; + + while(!queue.isEmpty()) + { + int courseDone = queue.poll(); + List dependencies = map.get(courseDone); + if(null != dependencies) + { + for(int course : dependencies) + { + indegree[course]--; + if(0 == indegree[course]) + { + queue.add(course); + count++; + if(count == numCourses) return true; + } + } + } + } + + return false; + } +} \ No newline at end of file