## Recursion

Recursion solves a problem by solving one or more sub-states of the problem itself.

Recursion solves a problem by solving one or more sub-states of the problem itself.

Introduce what is and when to use dynamic programming.

Given a binary tree, find its maximum depth.

Calculate the total sum of all root-to-leaf numbers.

Given a collection of numbers, return all possible permutations.

Invert a binary tree.

Given a binary tree, return the preorder traversal of its nodes’ values.

Given a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom.

Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.

Given a binary tree and a sum, find all root-to-leaf paths where each path’s sum equals the given sum.

Given a digit string, return all possible letter combinations that the number could represent.

Given a set of distinct integers, nums, return all possible subsets.

Given a collection of integers that might contain duplicates, nums, return all possible subsets.

Given a binary tree, check whether it is a mirror of itself.

Given a binary tree, return the inorder traversal of its nodes' values. (Both recursive and iterative solutions)

Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.

Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.

Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used.

Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.

Given an array where elements are sorted in ascending order, convert it to a height balanced BST.

Given a string of numbers and operators, return all possible results from computing all the different possible ways to group numbers and operators. The valid operators are +, - and *.