Архиватор · Шаг 2 из 4
Коды из дерева
Дерево построено — теперь из него читаются коды. Путь от корня до листа и есть код символа: шаг налево — 0, шаг направо — 1. Ни один код не начало другого, поэтому их можно писать подряд без разделителей и всё равно читать однозначно.
Что сделать
Прочитайте из дерева код каждого символа: путь от корня, налево — «0», направо — «1».
Что приходит
derevo— дерево из шага 1: лист — символ, узел — пара(левое, правое); илиNone
Что вернуть
Словарь «символ → код строкой из 0 и 1», ключи — в порядке листьев слева направо; дерево из одного листа — код "0"; None — {}.
Допишите функцию kody в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
В проекте
Архиватор зовёт kody один раз на файл и по этому словарю превращает каждый байт в его код — шаг 3.
kody(((99, 98), 97))
{99: '00', 98: '01', 97: '1'}
Код листа — последовательность поворотов от корня: в левое поддерево — "0", в правое — "1".
Ключи словаря — в порядке листьев слева направо: сначала всё левое поддерево, потом правое (так их и выдаёт обход «сначала налево»).
Особые случаи: дерево — один лист (не кортеж) — у него пути нет, и код ему "0", иначе его нечем было бы записать. None — пустой словарь.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.