ОБРАТИТЕ ВНИМАНИЕ, ЧТО ЭТО ДОМАШНЯЯ! -> Я не ищу прямые примеры коды, а некоторые нежные массирований моих рассуждений ...
Меня попросили написать функцию, которая удаляет корень двоичного дерева поиска, делая три вещи: я) вращение дерева справа II) удаление корня правого поддерева (который был первоначальным корнем BST) III) восстановление БСТ с новым корнем (который был слева от исходного дерева) и соответствующих перестройками детей этого узла ... Вот что у меня есть:
(define (rm-root my-bst)
(list (key (rot-r my-bst))
(left (rot-r my-bst))
(append (right (right (rot-r my-bst)))
(left (right (rot-r my-bst))))))
Но это все замечательно, ожидать, что он не перестраивать дерево с детьми узла, который был «продвигаемых» в корневой узел. Может кто-нибудь помочь мне думать о том, как я должен идти о реализации этого? Следует отметить, что мы определили BST в качестве списков и что функция гниль-р вращает BST вправо. Спасибо.













