diff --git a/binary_tree_traversal.java b/binary_tree_traversal.java new file mode 100644 index 00000000..a4dbe7c7 --- /dev/null +++ b/binary_tree_traversal.java @@ -0,0 +1,70 @@ +/** + * 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; + * } + * } + */ + + // sol 1 - using BFS + // Time Complexity - O(n) + //Space Complexity - O(n) + /* +class Solution { + public List> levelOrder(TreeNode root) { + List> result = new ArrayList<>(); + Queue q = new LinkedList<>(); + if(root== null) return result; + q.add(root); + while(!q.isEmpty()){ + int size =q.size(); + List li = new ArrayList<>(); + for(int i=0;i> result; + public List> levelOrder(TreeNode root) { + this.result = new ArrayList<>(); + dfs(root,0); + return result; + } + private void dfs(TreeNode root, int level){ + //base + if(root==null) return; + //logic + if(level==result.size()){ + result.add(new ArrayList<>()); + } + List li =result.get(level); + //result.get(level).add(root.val); // if we directly add the value it will be by reference and not val --> ds inside a ds acts like pointer + li.add(root.val); + dfs(root.left,level+1); + dfs(root.right,level+1); + } +} \ No newline at end of file diff --git a/course_schedule.java b/course_schedule.java new file mode 100644 index 00000000..e591431d --- /dev/null +++ b/course_schedule.java @@ -0,0 +1,48 @@ +// because we deal with neighbour's neighbour's neighbour's ... hence bfs/dfs +// we are visiting each and everynode Time Complexity: O(V+E) +// Queue's length is the breath of graph - Space Complexity O(V+E) +class Solution { + public boolean canFinish(int numCourses, int[][] prerequisites) { + //Adj List --> HashMap(easy to navigate what are connected values aka neighbours ) + HashMap> map = new HashMap<>(); + int[] indegrees = new int[numCourses]; + for(int[] pr:prerequisites){ + //pr[1] --> Independent course + //pr[0] --> Dependent course + // creating indegree array + indegrees[pr[0]]++; + map.putIfAbsent(pr[1],new ArrayList<>()); + map.get(pr[1]).add(pr[0]); // adj list 0--><1,2> + } + //Get all independent values and add in Queue + Queue q = new LinkedList<>(); // For BFS -- FIFO + int count=0; + for(int i=0;i dependencies = map.get(curr); + if(dependencies!=null){ + for(int dep:dependencies){ + indegrees[dep]--; + if(indegrees[dep]==0){ + q.add(dep); + count++; + if(count==numCourses) return true; + } + } + } + } + return false; + } + }