Как удалить из бинарного дерева поиска в Лиспе - PullRequest
1 голос
/ 07 декабря 2010

Как мне удалить узел из BST?

Мне нужен алгоритм для этого в Dr. Scheme.

Ответы [ 2 ]

3 голосов
/ 08 декабря 2010

В основном вы бросаете BST, который у вас есть, и создаете новый без элемента.

Вы можете сделать это, рекурсивно спускаясь по дереву. Если ваш элемент меньше корневого элемента данных, создайте BST, корневая ветвь которого и ветвь больше, чем скопирована из имеющейся у вас сейчас, но чья ветвь меньше, чем результат рекурсивного вызова.

Это очень похоже на то, как вы добавляете узел, но когда вы добираетесь до того, который вы искали, объедините два BST под ним и верните результат. Наверняка уже существуют вопросы о том, как это сделать.

2 голосов
/ 07 декабря 2010

Предполагая, что ваше двоичное дерево поиска использует прямые ячейки с содержимым только на листьях, и при условии, что вы работаете над домашним заданием Вы можете использовать set-car! или set-cdr! для изменения содержимого cons-ячейки.

...