From b558c96760139fe404807ed3f4ff8e27468d0620 Mon Sep 17 00:00:00 2001 From: subbu4061 Date: Mon, 2 Feb 2026 22:05:37 -0800 Subject: [PATCH] Adding BFS-1 solutions --- binary-tree-level-order-traversal.java | 74 ++++++++++++++++++++++++++ course-schedule.java | 53 ++++++++++++++++++ 2 files changed, 127 insertions(+) create mode 100644 binary-tree-level-order-traversal.java create mode 100644 course-schedule.java diff --git a/binary-tree-level-order-traversal.java b/binary-tree-level-order-traversal.java new file mode 100644 index 00000000..dcd857db --- /dev/null +++ b/binary-tree-level-order-traversal.java @@ -0,0 +1,74 @@ +// Solution -1 + +// TimeComplexity: O(n) where n is number of nodes +// SpaceComplexity: O(h) where h is height of the tree. +// Explantion: I perform a DFS traversal while keeping track of the current depth (level). When visiting a node, if this is the first time reaching that level, +// I create a new list and add it to the result; otherwise, I append the value to the existing list for that level. +// I then recursively process the left and right children with level + 1, which ensures all nodes are grouped by depth in level-order form. + + + +class Solution { + public List> levelOrder(TreeNode root) { + if(root == null) return new ArrayList<>(); + List> result = new ArrayList<>(); + helper(root, 0, result); + return result; + } + + private void helper(TreeNode root, int level, List> result){ + // base + if(root == null) return; + + // logic + List inter; + if(level == result.size()) { + inter = new ArrayList<>(); + result.add(inter); + } else { + inter = result.get(level); + } + + inter.add(root.val); + + // children + + helper(root.left, level+1, result); + helper(root.right, level+1, result); + + return; + + } +} + + +//Solution-2 + +// TimeComplexity: O(n) where n is number of nodes +// SpaceComplexity: O(w) where w is width of the tree. +// Explanation: I use a breadth-first search with a queue to traverse the tree level by level. For each iteration, I record the current queue size, which represents the +// number of nodes at that level, process exactly those nodes, store their values in a list, and enqueue their left and right children. +// This groups nodes naturally by depth and produces the level-order result. + + +class Solution { + public List> levelOrder(TreeNode root) { + if(root == null) return new ArrayList<>(); + List> result = new ArrayList<>(); + Queue q = new LinkedList<>(); + q.add(root); + while(!q.isEmpty()) { + int size = q.size(); + List inter = new ArrayList<>(); + for(int i =0; i> map = new HashMap<>(); + int[] arr = new int[numCourses]; + int count = 0; + for(int i=0; i list = new ArrayList<>(); + list.add(prerequisites[i][0]); + map.put(prerequisites[i][1], list); + } else{ + List exist = map.get(prerequisites[i][1]); + exist.add(prerequisites[i][0]); + } + arr[prerequisites[i][0]]+=1; + } + Queue q = new LinkedList<>(); + for(int i=0; i currList = map.get(curr); + if(currList!=null){ + for(int i =0; i