> For the complete documentation index, see [llms.txt](https://guide.ivanzakutnii.com/the-hard-way-to-swe-excellence/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://guide.ivanzakutnii.com/the-hard-way-to-swe-excellence/learning-path/algorithms-and-data-structures-2-2.md).

# Algorithms and Data Structures 2/2

Now it is time to go deeper into algorithms.

1. Study *recursion*, call stacks, base cases, and the conditions under which tail-call optimization is or is not available in your language.
2. Return to the [first algorithms and data structures section](/the-hard-way-to-swe-excellence/learning-path/algorithms-and-data-structures-1-2.md) and use the same study loop for the remaining structures and topics:
   * trees, binary search trees, and heaps;
   * graph representations, breadth-first search, and depth-first search;
   * comparison sorting and the reasons behind its lower bound;
   * binary search and the invariants that make it correct;
   * introductory greedy and dynamic-programming problems.

For each algorithm, trace it by hand on a small input, implement it, test boundary cases, and explain its complexity. Then learn when a standard-library implementation is the correct engineering choice.

May the force be with you!
