public class Competition { private List runners; private BinarySearchTree leaderboard; private RaceSimulator sim; public Competition() { runners = new List<>(); leaderboard = new BinarySearchTree<>(); sim = new RaceSimulator(); } public void newRunner(String name) { runners.append(new Athlete(name)); } public void simulate() { runners.toFirst(); while (runners.hasAccess()) { sim.simulate(runners.getContent()); leaderboard.insert(runners.getContent()); runners.next(); } } public Athlete[] top3() { Athlete[] top = new Athlete[3]; List inOrder = leaderboard.getInOrder(); inOrder.toFirst(); top[0] = inOrder.getContent(); inOrder.next(); if (!inOrder.hasAccess()){ return top; } top[1] = inOrder.getContent(); inOrder.next(); if (!inOrder.hasAccess()){ return top; } top[2] = inOrder.getContent(); inOrder.next(); return top; } }