Задача Яндекса:
Задача сейчас набирает обороты, и так вам дается бинарное дерево (с прописанной структурой вершин). В каждой вершине стоит одна буква из [a, z].
Две вершины считаются равными если множество букв в под деревьях совпадают. (Важно, именно как множество совпадает)
Вам нужно найти две равные вершины с максимальной суммой вершин в под деревьях.
Решение:
Давайте будем считать, что вы умеете находить количество вершин в под дереве(это можно делать во время дфс, взяв количество вершин в левом под дереве и в правом, дальше сложить и прибавить 1)
Создадим словарь, где в качестве ключа будем передавать лист (вектор) размера 26, а значением будут две вершины(на самом деле можно и одну)
Суть словаря следующая:
Вектор будет размера 26, где на позициях будут стоять 1 если такая буква есть и 0 иначе.
Таким образом две вершины равны если их эти вектора равны.
А значением будет две вершины у которых самое максимальное количество детей. То есть значения - это pair <Node, Node> ваша задача туда поставить две вершины с максимальным колиеством детей.
Чтобы найти ответ нужно пройтись по словарю, и взять в качестве ответа такую пару у которых сумма коилчество детей макисмально.
Псевдокод в комментариях:
Post #209
11.1K
- 🔥 13
- 👍 4
- ❤ 1
- 👏 1