Skip to content
Open

solved #1624

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions Binary_level_order.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
// Time : O(n) , since we are traversing each element in the tree
// Space: O(n/2) --> O(n), since we are counting child nodes
// on popping each parent node going down level by level
// Approach To Solve: solved it using breadth-first-search or bfs or level
// order traversal using FIFO(first in first out) using queue, we can
// also solve using DFS as well.

class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
if(root == null) return result;

Queue<TreeNode> q = new LinkedList<>();
q.add(root);

while(!q.isEmpty()){
int size = q.size();
List<Integer> temp = new ArrayList<>();
for(int i=0; i<size; i++){
TreeNode curr = q.poll();
temp.add(curr.val);

if(curr.left != null){
q.add(curr.left);
}

if(curr.right != null){
q.add(curr.right);
}
}

result.add(temp);
}
return result;
}
}
47 changes: 47 additions & 0 deletions Course_Schedule.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// Approach: solved using kahns algorithm --> BFS topological sorting
// Time : O(V + E) where V is numCourses and E is the number of prerequisite pairs.
// Space complexity is O(V + E).
// The indegree array uses O(V).
// The adjacency list stored in the HashMap uses O(E).
// The queue can hold up to O(V) nodes in the worst case.
// No extra recursive stack since this is BFS.

class Solution {
public boolean canFinish(int numCourses, int[][] prerequisites) {
int[] indegrees = new int[numCourses];
HashMap<Integer, List<Integer>> map = new HashMap<>();

for (int[] pr : prerequisites) {
indegrees[pr[0]]++;
map.putIfAbsent(pr[1], new ArrayList<>());
map.get(pr[1]).add(pr[0]); // fixed syntax
}

int count = 0;
Queue<Integer> q = new LinkedList<>();

// only add nodes with indegree 0
for (int i = 0; i < numCourses; i++) {
if (indegrees[i] == 0) {
q.add(i);
}
}

while (!q.isEmpty()) {
int curr = q.poll();
count++;

List<Integer> dependencies = map.get(curr);
if (dependencies != null) {
for (int dependent : dependencies) {
indegrees[dependent]--;
if (indegrees[dependent] == 0) {
q.add(dependent);
}
}
}
}

return count == numCourses;
}
}