Кирпич второй: перебор кодовых слов
Чтобы найти свободное место, нужно уметь перечислять двоичные слова в правильном порядке: сначала все короткие, потом длиннее, а внутри одной длины — по возрастанию значения. Именно так ты сам просматриваешь дерево.
Внешний цикл идёт по длине L, внутренний — по числам от 0 до 2**L−1. Функция bin(i)[2:] переводит число в двоичную запись, а rjust(L, "0") дополняет её нулями слева до нужной длины — иначе код 011 превратился бы в 11.
Порядок перебора гарантирует, что первый найденный ответ и есть кратчайший, а среди равных по длине — наименьший по значению. Это ровно те две оговорки, что стоят в условиях экзамена.