Usually passing once through the data structure forwards, and another time through the data structure backwards. Can be used to solve some greedy problems?