Изменения

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

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

759 байт убрано, 11:45, 9 января 2017
Поиск максимального поддерева, являющегося BST, в заданном двоичном дереве: 10
|definition = Найти в данном дереве максимальное из поддеревьев поиска.
}}
Будем рассматривать каждую вершину дерева, предполагая, что она может являться корнем максимального поддерева поиска. Найдём для каждой из них количество всех вершин, которые могут находиться в таком поддереве. Максимальный из результатов, получаемых на каждом шаге, будем запоминать. Вместе с максимумом будем запоминать и соответствующую ему вершину. После того, как мы обошли всё дерево и нашли корень дерева поиска с наибольшим количеством вершин, запускаем процедуру<tex>\mathrm{preorderTraversal}</tex>, выводящую все вершины на экран.
'''Node''' root()
res += dfs(v.left, max, v.left.key)
'''return''' res
 
Наконец, рассмотрим процедуру <tex>\mathtt{dfsPrint}</tex>, выводящую вершины максимального дерева поиска. Она также будет принимать на вход вершину и две границы, позволяющие включить только те вершины, которые удовлетворяют определению дерева поиска.
 
'''func''' dfsPrint(v: '''Node''', max: '''T''', min: '''T''')
'''print''' v.key
'''if''' v.left != ''null''
'''if''' v.left.key < v.key '''and''' v.left.key > max
dfsPrint(v.left, v.left.key, min)
'''if''' v.right != ''null''
'''if''' v.right.key > v.key '''and''' v.right.key < min
dfsPrint(v.left, max, v.left.key)
[[Файл:BST_from_seq.gif|right|thumb|260px|Восстановление дерева поиска по последовательности ключей]]
243
правки

Навигация