243
правки
Изменения
→Поиск максимального поддерева, являющегося BST, в заданном двоичном дереве
dfsPrint(v.left, max, v.left.key)
[[Файл:BST_from_seq.gif|right|thumb|300px260px|Восстановление дерева поиска по последовательности ключей]]
Заметим, что <tex>\mathtt{dfsPrint}</tex> выводит значения в узлах поддерева следующим образом: сначала идёт до упора влево, затем на каком-то делает шаг вправо и снова движется влево и так до тех пор, пока не будет выведено <tex>\mathtt{maxdp}</tex> вершин. Полученная последовательность позволит нам однозначно определить расположение всех узлов поддерева. Первая вершина всегда будет в корне. Затем, пока не будут использованы все значения, будем последовательно подвешивать левых сыновей к последней добавленной вершине, пока не найдём номер, нарушающий убывающую последовательность, а для каждого такого номера будем искать вершину без правого потомка, хранящую наибольшее значение, не превосходящее того, которое хотим поставить, и подвешиваем к ней элемент с таким номером в качестве правого сына.