Source: https://www.cs.princeton.edu/~rs/AlgsDS07/08BinarySearchTrees.pdf