Рекурсия · 10 из 19
Общий предок
За столом спорят, кем приходятся друг другу двое из родни. Спор решается одним именем: ближайший человек, от которого оба происходят.
Что сделать
Решите спор за столом — найдите ближайшего человека, от которого происходят оба.
Что приходит
drevo— корень древа: словарь с ключами"imya"и"deti"pervoeиvtoroe— имена двоих; имена в древе не повторяются
Что вернуть
Имя ближайшего общего предка; если один из двоих — предок другого, то он сам; кого-то нет в древе — None.
Допишите функцию obshchiy_predok в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
У Петра дети Иван и Мария, у Ивана — Фёдор и Анна, у Марии — Глеб. Для Фёдора и Анны ближайший общий — "Иван", для Фёдора и Глеба — уже "Пётр".
drevo = {"imya": "Пётр", "deti": [
{"imya": "Иван", "deti": [{"imya": "Фёдор", "deti": []}, {"imya": "Анна", "deti": []}]},
{"imya": "Мария", "deti": [{"imya": "Глеб", "deti": []}]},
]}
obshchiy_predok(drevo, "Фёдор", "Анна")
'Иван'
Функция принимает древо (словарь с ключами «imya» и «deti») и два имени. Возвращает имя ближайшего общего предка — последнего совпадающего человека на путях от корня древа до каждого из двоих. Если один из двоих — предок другого, ответом будет он сам. Если хотя бы одного имени в древе нет, возвращается None. Имена в древе считаются неповторяющимися.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.