Поиск наидлиннейшего пути в бинарном дереве поиска
|
|
Среда, 09 Декабря 2020 г. 18:32
+ в цитатник
AVA12: Небольшие замечания к алгоритму, который предложил
Akina:
Нет необходимости строить все возможные пути, а потом отбрасывать лишние. Достаточно знать высоты всех поддеревьев и "корень", через который проходит длиннейший путь. Чтобы этот путь восстановить, нужно спуститься из этого "корня" влево и вправо, каждый раз выбирая потомка с максимальной высотой и занося посещенную вершину в список пути. (После чего отбросить первый или последний лист).
Для поиска "корня" нужно обойти дерево в глубину. Для каждого узла/листа храним высоту его поддерева H (изначально 0). Отдельно храним длину лучшего найденного пути L (изначально 0) и ссылку на "корень" этого пути P. Каждый раз, поднимаясь из потомка к родителю, пишем в H родителя MAX(H_родителя, H_потомка + 1). Когда посещены оба потомка, длина максимального пути, для которого узел является "корнем", равна сумме H дочерних узлов. Если эта длина больше L, то в L пишем эту длину, а в P пишем ссылку на узел.
https://forum.sources.ru/index.php?showtopic=420994&view=findpost&p=3842703
Метки:
Алгоритмы
-
Запись понравилась
-
0
Процитировали
-
0
Сохранили
-