Изменения

Перейти к: навигация, поиск

Дерево поиска, наивная реализация

19 байт добавлено, 15:46, 6 января 2017
Поиск максимального поддерева, являющегося BST, в заданном двоичном дереве
maxdp = dp
maxroot = u
dfsPrint(maxroot,-INF,INF)
Функция Процедура <tex>dfs(v,max,min,res)</tex> возвращает позволяет подсчитать максимальное количество вершин двоичного поддерева поиска с вершиной <tex>v</tex>. В начале работы этой функции процедуры <tex>max</tex> и <tex>min</tex> принимают нейтральные значения (<tex>-INF</tex> и <tex>INF</tex> соответственно, где <tex>INF</tex> - очень большое число), а <tex>res</tex> равен <tex>1</tex> (одна вершина в дереве уже имеется). Обход осуществляется следующим образом:
'''1 шаг.''' Проверяем, есть ли у вершины левый сын. Если его нет, переходим к пункту 2, иначе сравниваем значения в этой вершине и в её левом потомке, а также значение в левом сыне с максимумом в поддереве. Если значение в левом сыне меньше, чем значение в вершине и больше переменной <tex>max</tex>, то запускаем <tex>dfs</tex> из левого сына. Здесь роль v будет разыгрывать <tex>v.left</tex>, <tex>max</tex> приобретёт значение <tex>v.key</tex>, <tex>min</tex> по-прежнему останется <tex>min</tex>, а <tex>res</tex> увеличится на 1. ''Пояснение:'' ключи вершин левого поддерева не должны превосходить значения в рассматриваемой вершине, поэтому мы изменяем <tex>max</tex>. На <tex>min</tex> эта вершина не влияет в случае левого поддерева, поэтому он не изменяется. <tex>res</tex> увеличивается на 1, так как в наше поддерево добавилась ещё одна вершина.
'''3 шаг.''' Возвращаем результат в переменной <tex>res</tex>, где записано количество вершин поддерева.
[[Файл:BST_in_Tree.gif|centre|Пример выполнения процедуры dfs (из корневой для вершины дерева)с номером 7]]
Процедура обхода дерева представлена ниже:
243
правки

Навигация