
This course includes our updated coding exercises so you can practice your skills as you learn.
See a demo
Master data structures and algorithms through daily challenges and animated explanations, practicing real interview questions and improving problem solving and communication for top tech roles.
Stay consistent by treating the course as daily challenges, complete every day's target, and code the solutions yourself to build momentum and prepare for the coding interview.
Explore what data structures are, with arrays illustrating data values, relationships, and operations, and learn why mastering them helps solve coding interview problems efficiently by choosing suitable structures.
Understand the need for complexity analysis and how time and space complexity drive decisions. Use asymptotic analysis and Big-O notation to compare algorithms for scalability.
Master asymptotic analysis and big o notation to see how time complexity grows with input size, neglect constants, and compare algorithms using O(1), O(log n), O(n), O(n log n), O(n^2).
Explore space complexity using big-O, focusing on auxiliary memory rather than input size, and learn time-space trade-offs, constants, and techniques to simplify big-O expressions, including logarithms.
Master logarithms in coding interviews, with log n base two and intuitive examples showing why log n yields efficient time and space complexity in halving-input algorithms like binary search.
Analyze the time and space complexity of common array operations, including accessing, setting, traversing, copying, inserting, and removing, across static and dynamic arrays with amortized constant time.
Practice coding with the Udemy exercises environment, run tests, and debug to ace the coding interview, starting with day one, the sorted squared array question and its discussion videos.
Explore how to compute the squares of a sorted array and return them in ascending order, including negatives, zeros, and duplicates, with test case discussion.
Master the brute force approach to square each element of a sorted array, then sort the results, achieving O(n log n) time and O(n) space.
Apply a brute force Python solution to build a sorted squared array by squaring each element, then sorting the result, and returning it after verifying test cases.
Use the sorted input and a two-pointer approach to square extremes and fill a new array from the end, achieving O(n) time and O(n) space.
Use a two-pointer approach in Python to fill a sorted squares array by comparing the squares of end elements and placing the larger value into the result from the back.
Determine whether an array is monotonic by checking non-decreasing or non-increasing sequences, with examples like 1-2-3, 3-2-1, and 1-2-2, and discuss edge cases and test cases.
Determine if an array is monotonic by evaluating non increasing and non decreasing patterns, analyzing three cases, and reporting time complexity O(n) and space complexity O(1).
Develop a monotonic array checker by comparing first and last elements, then scanning adjacent pairs to confirm increasing or decreasing order, while treating an empty array as monotonic.
Celebrate day one with a solid foundation in data structures and algorithms, tackling arrays and Big-O notation and reinforcing consistency for progress toward top tech interviews.
Learn how to rotate an array to the right by k using modulo to optimize rotations, compare brute-force and reversal strategies, and analyze their time and space complexities.
Examine a Python right-rotation solution: rotate [1,2,3,4,5] by 3 using a temp array, handle k%=n, and achieve O(n) time and O(k) space to produce [3,4,5,1,2].
Learn to rotate an array in constant space using an in-place reverse method, achieving O(n) time and O(1) space with k modulo length.
Use brute-force two-pointer to determine the area from heights by taking the minimum of heights at i and j multiplied by their index difference, giving O(n^2) time and O(1) space.
Apply the two-pointers method to maximize the area between lines by using the minimum height times width, moving the smaller-height pointer, achieving O(n) time and O(1) space.
Master recursion basics, including a function calling itself, base conditions, and when to use it to solve problems by breaking them into smaller subproblems, with factorial examples.
Learn to master recursion with the recursive leap of faith, identifying subproblems, trusting recursive calls, linking problems, and establishing base conditions through practical examples like sequences and factorials.
Learn to visualize recursion using a recursion tree and the recursion call stack, illustrated with 5 factorial, highlighting base cases, last in first out, and space-time complexity.
Compare recursion and iteration by computing n factorial with both methods, noting that recursion has ascending and descending phases while iteration remains strictly ascending and uses less call-stack space.
Identify the base condition by considering the last valid input or the first invalid input, instead of visualizing the whole recursive sequence, then stop recursion and return.
Explore the recurrence relation, which expresses a problem's solution via subproblems in recursion, illustrated by factorial f(n) = n * f(n-1) and the recursive print sequence example.
Master solving recursion questions by drawing a recursion tree, using the fibonacci series as an example, applying f(n)=f(n-1)+f(n-2) with base cases f(0)=0 and f(1)=1, then coding and pseudocode.
Master recursion by solving the sum from zero to n and from n to zero, and practice building recursive solutions for coding interview questions.
Master recursion as the foundation for backtracking, dynamic programming, greedy algorithms, and divide-and-conquer techniques, and explore top-down memoization, bottom-up tabulation, and classic problems like the Josephus and Tower of Hanoi.
Analyze the time and space complexity of recursive solutions by counting nodes in the recursion tree and multiplying by per-node work, and assess stack usage via maximum depth.
Explain the kth symbol in grammar by building an n-row table where zeros become zero one and ones become one zero, then locate the kth symbol in the nth row.
Use recursion to find the kth symbol in grammar, noting the first half equals the previous row and the second half is not, with a mid-based recurrence and base case.
Convert the recurrence for the k-th symbol in grammar into pseudocode, defining the base case, length, and midpoint. Implement recursive calls and not operations, then analyze time and space.
Present a complexity analysis of the k-th symbol in grammar by tracing a recursion tree to show O(n) time and O(n) space for the solution with n and k.
Master solving the k-th symbol in grammar with a recursive Python approach: use base case n=1 returning 0, compute length 2^(n-1), split at mid, recurse or flip with k-mid.
Josephus problem reveals the winner in a circular elimination where, starting from the first friend, you count the next k players and remove the last counted until one remains.
Explore three approaches to the Josephus problem, starting with an intuitive O(n^2) solution, then improve to O(n) using modulo and an array-based, zero-indexed approach.
Learn how to write the pseudocode for the Josephus problem using an array, a winner function, and base and recursive cases to eliminate participants until one remains.
Examine the first Josephus approach, revealing O(n^2) time due to n deletions each costing O(n) and O(n) space from the array and recursion.
Present a recursive Python solution to Josephus problem by building an array 1..n, using modulo to find removal index at start index, shrinking with a helper until a winner remains.
Learn approach two for the Josephus problem by deriving a recurrence from the n-1, k subproblem, using modulo to map to n, and applying the base case of one remaining.
Write pseudocode for the Josephus problem using a winner function with base case n equals 1 and recursive case n minus 1, then apply modulo and convert to one-indexed.
Analyze the time and space complexity of the Josephus problem's second approach, showing each call does constant work and the recursion stack yields O(n) space.
Implement a zero-indexed Josephus solution in Python using a recursive helper and base case when n equals one, with modular arithmetic to find the safe position, then convert to one-indexed.
Advance from approach two to approach three by presenting an iterative solution that improves space complexity, maintains O(n) time, and uses k, modulo, and zero-index to one-index conversion.
Analyze the time and space complexity of the iterative Josephus solution, showing linear time and constant space, and contrast with the recursive approach that uses a call stack.
Code the iterative approach for the Josephus problem in Python, converting the recursive solution to a loop with k, handling cases, and computing the survivor via modulo and plus one.
Celebrate milestones as you practice recursion and problem solving, reinforcing skills that edge you closer to acing tough interview questions.
Explore the tower of Hanoi puzzle with three rods, moving n disks from rod one to rod three, printing each move and returning the total number of moves.
Identify how recursion solves the tower of Hanoi by handling the subproblem of moving n minus 1 disks to a rod, then moving the largest disk.
Learn how to solve the Tower of Hanoi with recursion by analyzing one, two, and three-disk cases, then generalizing to n disks through a smaller-disk subproblem, largest-disk move, and recursion.
Illustrate the recursion tree for the Tower of Hanoi with three disks, performing n−1 moves to the auxiliary rod, move the nth disk, then n−1 moves to the target rod.
Code a Python Tower of Hanoi solver that prints each move and returns the total moves using a nonlocal count in a helper, with base and recursive cases.
Analyze the Tower of Hanoi algorithm's time and space complexity, showing that space is O(n) due to the recursion stack and time is O(2^n) from the recurrence t(n)=2 t(n-1)+1.
Explore recursive solutions to summing a peculiar array whose elements are integers or nested arrays, by converting nested sums to their equivalent values raised to the nesting level.
Traverse nested arrays, sum integers, and recursively raise sub-sums to powers, with time complexity O(n) and space complexity O(d).
Explore a Python implementation of the power sum function, traversing arrays and nested lists recursively to accumulate sums and handle powers; learn about time complexity O(n) and space complexity O(d).
Celebrate day three milestones, including the Tower of Hanoi and power sum problem, and fuel perseverance and focus to advance in DSA interviews.
Learn backtracking as a controlled recursive approach that solves problems with many possible paths, using in-place state changes and pruning to build Sudoku-like solutions.
Backtracking distinguishes itself as controlled recursion that changes the state of the problem in place and prunes paths that do not lead to a solution, unlike simple recursion.
Backtracking explores one option at a time using recursion, prunes paths when constraints are violated, and differs from brute force by building only valid solutions, as in Sudoku.
Explore backtracking versus pruned recursion, showing how in place state changes and inputs passed by reference avoid new allocations while generating permutations by swapping elements.
Discover a blueprint for solving backtracking questions by treating it as controlled recursion, updating state in place, validating each choice, and reverting choices when paths fail.
Identify when to use backtracking in coding interviews by exploring paths to find all solutions, such as permutations, and prune paths; avoid backtracking for optimization problems where dynamic programming fits.
Learn to generate all permutations of a distinct integer array, returning every possible arrangement, with examples like [1,2,3] producing six permutations and test-case practice.
Explore how to identify and generate all permutations of an array using a backtracking approach, including factorial reasoning, in-place swapping, and recursive construction.
Write a recursive backtracking pseudocode to generate permutations, with base case at i equals length-1, swapping elements at i and j, recursing with i+1, and backtracking to restore state.
Develop a Python solution to generate all permutations of a distinct integers array using a helper function, swaps, and backtracking to collect results at the base case.
Evaluate the time and space complexity of generating all permutations. Show that recursion yields space complexity O(n), while producing n! permutations drives time complexity to O(n * n!).
Generate all unique permutations of a nums array that may contain duplicates. Note that input 1,1,2 yields three unique permutations, and the solution uses slight tweaks from the previous question.
Explain why the previous two-pointer approach will not work for this permutation problem and how pruning with a hash table yields unique permutations.
Write pseudocode for the backtracking permutations approach, using a hash table to skip duplicates, and perform choose, recurse, and revert steps.
Write a Python backtracking solution for permutations with duplicates by pruning repeated branches using a hash map, swapping elements, and storing unique results in a list via a helper function.
Explore complexity analysis for permutations with duplicates, showing why time is n multiplied by n factorial and space equals n due to the recursion stack.
Celebrate milestones in 50 days of DSA Python data structures and algorithms LeetCode by mastering backtracking, solving problems that strengthen understanding and fuel learning on your path to success.
Explore how to generate all subsets (the power set) of a unique integer array, ensuring no duplicates and allowing any order, with test-case reasoning for coding interviews.
Learn how to generate all subsets (power set) of an array, using recursive backtracking and an iterative approach, with two to the power n possibilities for each element.
Compare the pseudocode with the backtracking blueprint, detailing the base condition, exclude and include choices, and in-place updates. Backtracking pops elements to revert choices, generating all subsets.
Analyze the space and time complexity of generating all subsets; there are 2^n subsets, since each element is either included or excluded, giving time n·2^n and space O(n).
Walk through the Python powerset implementation, tracing a recursive helper and backtracking to generate all subsets of [1, 8, 7], totaling 2^n outputs, with complexity notes.
Learn how to generate all unique subsets from an array that may contain duplicates, ensuring no duplicates in the power set, with the sample input 1, 2, 2.
Learn a duplicate-aware approach to generating unique subsets: sort the input, treat include branches as allowing repeats of a value, and exclude branches remove all occurrences to avoid duplicates.
Apply a recursive backtracking approach with include and exclude branches and a helper function to generate all unique subsets, handling base case when index reaches the end.
Analyze the time and space complexity of the subset generation approach, showing worst-case time O(n 2^n) and space O(n) due to recursion, with sorting contributing O(n log n) but ignored.
Celebrate day five milestones by recognizing progress in subsets and backtracking problems, building a strong foundation for future interviews. Stay consistent and keep believing in yourself.
Explore the coding interview problem of generating all combinations of k numbers from 1 to n, where order doesn't matter, and learn the approach and clarifying questions.
Apply a backtracking recursive approach to generate all k-combinations from 1 to n using two pointers i and j, building sequences and backtracking to explore all options.
Compute the time complexity of generating all n c k combinations with a recursive approach, showing the bound as k times n c k and the space complexity as k.
Code a Python backtracking solution to generate all combinations of size k from 1 to n, using a helper function, a current list, and a results list.
Prune branches that cannot reach length k and limit j to x = n - need - 1, where need = k - len(cur), to avoid extra calls.
Optimize this code by applying earlier discussed changes, compute need as k minus the length of curve, and limit the loop to N minus need minus one.
Solve the famous coding interview problem Combination Sum I by generating all unique combinations from the candidates that sum to the target, with unlimited reuse of numbers.
Explore a backtracking approach to find all combinations of candidate numbers that sum to a target, using recursion, pruning, unlimited repetitions, and starting from the current index to avoid duplicates.
Analyze the space and time complexity of the combination approach by examining the recursion tree, depth t/m, pruning when sums reach or exceed T, given n candidates and M.
derive upper bound on number of nodes in a recursive k-ary tree with a geometric progression, showing nodes grow as k^(height+1) and informing space time complexity for combination sum one.
Analyze the recursive complexity of a combination-like algorithm with target t, minimum candidate m, and branching factor n. The depth t/m yields time complexity n^(t/m+1) and space complexity O(t/m).
Implement a recursive backtracking solution for combination sum one using a helper with start index, current combination, and sum included; explore candidates and backtrack to build all target-summing combinations.
Celebrate day six milestones in this 50 days of DSA course as you tackle combinations and backtracking, showcasing growing problem solving skills that prepare you for interviews; stay focused.
Explore the combination sum two problem by finding unique combinations from candidates that sum to a target, with each number used only once and no duplicates.
Master the differences between combination sum one and two, use each candidate at most once, prune duplicate combinations with a hash map, and sort the input to ensure unique results.
Evaluate the time and space complexities of the combination sum two approach, revealing a worst-case time of 2^n and linear space from the recursive call stack and a HashMap.
Implement combination sum II with backtracking: sort candidates, use a recursive helper with index and current sum, prune when sum exceeds target, skip duplicates, and collect all valid combinations.
Celebrate completing day seven and mastering tough problems step by step. Stay committed, keep practicing, and let hard work and perseverance drive your future achievements.
Apply backtracking to solve a hard sudoku by filling empty cells in a 9x9 2d array so every row, column, and 3x3 box contains digits 1–9, with dots for empties.
learn to solve a sudoku with recursive backtracking: fill the first empty cell, branch with 1–9, prune dead paths, backtrack when no valid number fits, and reach a solution.
Master sudoku backtracking pseudocode: identify the next empty cell, try 1–9 with validity checks, prune on failure, backtrack, and stop when the board is solved.
Code the isValid function for a sudoku box by enforcing row, column, and 3x3 box checks with a loop over 0–8 using base_row = 3*(row//3) and base_col = 3*(col//3).
Implement a Python sudoku solver that fills the board in place with a recursive backtracking function and an is_valid checker, using dots for empties and completing when full.
Analyze the sudoku solver's time and space complexity, showing constant time due to a fixed 9x9 board, backtracking and recursion bound by nine to the power of empty cells.
Solve the hard N-queens puzzle with backtracking, placing n queens on an n by n board so none attack, and return all distinct solutions, illustrated with n=4.
Solve the n queens problem on an n by n board with backtracking, placing one queen per row, checking column and diagonal conflicts, pruning branches, and generating all valid solutions.
Explore solving the N-queens problem with backtracking by writing a recursive backtrack function, using is_valid to check column and top diagonals, and reverting choices to find all solutions.
Learn to solve the n-queens problem in Python using recursive backtracking, placing queens on an n-by-n board with is_valid checks and board-to-string conversion.
Explore the n-queens solution's time complexity of roughly n factorial due to pruning, and the space complexity of order n squared from board storage and recursion depth.
Dynamic programming refines recursion by storing results to avoid recomputation, using memoization or tabulation. It hinges on overlapping subproblems and optimal substructure, illustrated by Fibonacci and Tower of Hanoi examples.
Master dynamic programming by recognizing patterns and variations across interview questions, focusing on patterns like Fibonacci, knapsack, longest common subsequence, and Kadane's algorithm to tackle new problems.
Develop dynamic programming expertise by first solving recursively, then memoizing (top-down), and finally constructing a bottom-up tabulation with space optimization.
Writing the recursive solution first clarifies subproblems, transition formulas, and base conditions, guiding the bottom-up or tabulation approach and shaping the dynamic programming table for interview questions.
Identify whether a coding interview problem can be solved with dynamic programming. Spot an optimal solution, like the longest, maximum, or minimum, and check for recursion, choices, and overlapping subproblems.
Master the Fibonacci sequence from zero and one, and implement a function to compute f(n) using f(n-1)+f(n-2); explore multiple solutions and their time and space complexity.
Explore dynamic programming through the Fibonacci coding interview question, noting overlapping subproblems and optimal substructure, with four steps: write the recursive solution, memorize it, develop bottom-up tabulation, and space-optimized tabulation.
Explore recursion through the fibonacci sequence, implementing f(n)=f(n-1)+f(n-2), identify the base cases when n<2, and introduce the initial dynamic programming approach.
Evaluate the fibonacci recursion, revealing time complexity about 2^n and space complexity about n, via a recursion tree, and preview dp with space-optimized tabulation.
Demonstrates a recursive Python solution for computing Fibonacci numbers, detailing base cases, f(n-1) and f(n-2) calls, and analyzes time complexity O(2^n) and space complexity O(n).
Learn the memoization (top-down) approach to Fibonacci by turning recursion into stored results using a hash table, enabling constant-time lookups and faster computation.
Explore memoization for Fibonacci: show time complexity O(n) with n operations and constant-time retrieval from the hash table, and space complexity O(n) from the hash table and recursion stack.
Learn how memoization speeds up Fibonacci calculations by storing computed values in a hash table and avoiding redundant recursion, with time and space complexity O(n).
Apply the tabulation (bottom-up) approach to Fibonacci by building a one dimensional table with base cases f(0)=0 and f(1)=1, filling up to f(5)=5 and relating it to recursion.
Analyze the tabulation approach's time and space complexity, showing an O(n) time and O(n) space due to the one-dimensional table.
Implement the tabulation approach to compute the nth Fibonacci number with a dp array, initialize dp[0]=0 and dp[1]=1, then use a while loop to fill up to dp[n].
optimize the bottom-up tabulation for fibonacci by using only three variables: prev, cur, and next, eliminating the full 1D table and achieving O(n) time with O(1) space.
Master a space-optimized tabulation approach to the Fibonacci sequence in Python, using two variables and a loop with time complexity O(n) and space complexity O(1).
Solve the climbing stairs problem by modeling it as a dynamic programming task, recognizing overlapping subproblems and a Fibonacci pattern to count distinct ways, an easy coding interview question.
Adopt a fibonacci-style dynamic programming approach to the n-step problem, summing the two previous values; begin with recursion, then memoization, tabulation, and space-optimized variants.
Looking for the best data structures and algorithms Python course? This structured DSA course is designed for anyone preparing for LEETCODE challenges and technical coding interviews. With 117 hands-on coding exercises spread across 50 structured days, you'll master every essential data structure in Python and algorithm needed to ace your next interview.
Student Testimonials:
"Amazing Course" - Erick Odhiambo Otieno
"I never seen the best course in this learning platform. It is the best course if you want to understand DSA to the core. you should try it guys. thanks a lot sir for this best course." - Nibru Kefyalew
"Great course!" - Shay Keren
"Very thorough and methodical" - Shahjamal Biswas
"Very intuitive and in-depth! so far" - Nikhil Valse
"A good explanation for this problem." - Bhuvan Akoju
"So far good explanation on DS ,recursion and quizzes." - Anuradha Yadavalli
"the instructor is very good at explaining and simplifying complex concept. this course cover all the DSA module in depth withs great examples" - RODRIGUE NGONGANG
"excellent" - Neha Nayak
"Awesomly attractive course!" - Dariusz Jenek
"Great one" - Wilson Edafe
"Excellent Teaching" - Ameeruddin Syed
"It is an excellent platform !!" - Subhajit Bera
About the Course:
Welcome to the Data Structures and Algorithms Coding Interview Bootcamp with Python!
The primary goal of this course is to prepare you for coding interviews at top tech companies. By tackling one problem at a time and understanding its solution, you'll accumulate a variety of tools and techniques for conquering any coding interview.
Daily Data Structures and Algorithms Coding Challenges:
The course is structured around daily coding challenges. Consistent practice will equip you with the skills required to ace coding interviews. For the next 40 days commit to yourself to practice atleast 2 coding interview questions everyday. You don't need any setup for this as the daily coding problem challenges can be solved in the coding environment provided by Udemy. The course will automatically track your progress and you just need to spend your time making actual progress everyday.
Topics Covered:
We start from the basics with Big O analysis, then move on to very important algorithmic techniques such as Recursion, Backtracking and Dynamic Programming Patters. After this we move to cover common data structures, and discuss real problems asked in interviews at tech giants such as Google, Meta, Amazon, Netflix, Apple, and Microsoft.
For each question, we will:
Discuss the optimal approach
Explain time and space complexity
Code the solution in Python (you can follow along in your preferred language)
Additional Resources :
The course includes downloadable resources, motivational trackers, and cheat sheets.
Course Outline:
Day 1: Arrays, Big O, Sorted Squared Array, Monotonic Array
Day 2:Recursion,k-th symbol in Grammar,Josephus problem
Day 3:Recursion, Tower of Hanoi, Power Sum
Day 4:Backtracking, Permutations, Permutations 2
Day 5:Backtracking, Subsets, Subsets 2
Day 6:Backtracking, Combinations, Combinations Sum 1
Day 7:Backtracking,Combinations Sum 2,Combinations Sum 3
Day 8:Backtracking,Sudoku Solver, N Queens
Day 9:Dynamic Programming, Fibonacci, Climbing Stairs
Day 10:Dynamic Programming, Min Cost Climbing Stairs, Tribonacci
Day 11:Dynamic Programming, 01 Knapsack, Unbounded Knapsack
Day 12:Dynamic Programming, Target Sum, Partition Equal Subset Sum
Day 13:Dynamic Programming, LCS, Edit Distance
Day 14:Dynamic Programming, LIS, Max Length of Pair Chain, Russian Doll Envelopes
Day 15:Dynamic Programming, Palindromic Substrings, Longest Palindromic Substring, Longest Palindromic Subsequence
Day 16:Dynamic Programming, Palindrome Partitioning, Palindrome Partitioning 2
Day 17:Dynamic Programming, Word Break, Matrix Chain Multiplication
Day 18:Dynamic Programming, Kadane's algorithm - Max Subarray, Maximum Product Subarray
Day 19:Greedy Algorithms - Fractional Knpasack, Non overlapping Intervals
Day 20:Greedy Algorithms - Jump Game 1, Minimum # of arrows to burst baloons
Day 21:Greedy Algorithms - Two City Scheduling, Boats to Save people
Day 22:Greedy Algorithms - Task Scheduler, Largest Number
Day 23:Greedy Algorithms - Gas Stations, Jump Game 2
Day 24: Arrays, Rotate Array, Container with Most Water
Day 25: Hash Tables, Two Sum, Isomorphic Strings
Day 26: Strings, Non-Repeating Character, Palindrome
Day 27: Strings, Longest Unique Substring, Group Anagrams
Day 28: Searching, Binary Search, Search in Rotated Sorted Array
Day 29: Searching, Find First and Last Position, Search in 2D Array
Day 30: Sorting, Bubble Sort, Insertion Sort
Day 31: Sorting, Selection Sort, Merge Sort
Day 32: Sorting, Quick Sort, Radix Sort
Day 33: Singly Linked Lists, Construct SLL, Delete Duplicates
Day 34: Singly Linked Lists, Reverse SLL, Cycle Detection
Day 35: Singly Linked Lists, Find Duplicate, Add 2 Numbers
Day 36: Doubly Linked Lists, DLL Remove Insert, DLL Remove All
Day 37: Stacks, Construct Stack, Reverse Polish Notation
Day 38: Queues, Construct Queue, Implement Queue with Stack
Day 39: Binary Trees, Construct BST, Traversal Techniques
Day 40: Pre order and In order Traversal of Binary Tree - Iterative
Day 41: Post Order Traversal Iterative, Path Sum 2
Day 42: Construct Binary Tree from Pre and In order Traversal ^ In and Post order Traversal
Day 43: Binary Trees, Level Order Traversal, Left/Right View
Day 44: Level order Trav 2, ZigZag Traversal
Day 45: Vertical order Traversal, Sum root to leaf numbers
Day 46: Binary Trees, Invert Tree, Diameter of Tree
Day 47: Binary Trees, Convert Sorted Array to BST, Validate BST
Day 48: Lowest common Ancestor of BST, Unique BST 2
Day 49: Lowest common Ancestor of Binary Tree, Unique BST 1
Day 50: Serialize and Deserialize Binary Tree, N-ary Tree Level Order Traversal
Day 51: Heaps, Max Heap, Min Priority Queue
Day 52: Graphs, BFS, DFS
Day 53: Graphs, Number of Connected Components, Topological Sort
Day 54: Number of Provinces, Find if path exists in Graph
Day 55: Number of Islands, Numbers with same consecutive differences
My confidence in your satisfaction with this course is so high that we offer a complete money-back guarantee for 30 days! Thus, it's a totally risk-free opportunity. Register today, facing ZERO risk and standing to gain EVERYTHING.
So what are you waiting for? Join the best Python Data Structures & Algorithms Bootcamp on Udemy.
I'm eager to see you in the course.
Let's kick things off! :-)
Jackson