2010-12-07 53 views
1

Comment puis-je supprimer un noeud d'un BST?Comment supprimer d'un arbre de recherche binaire en Lisp

J'ai besoin d'un algorithme pour le faire dans Dr. Scheme.

+0

C'est complètement une question d'implémentation. Comment représentez-vous la BST? – Svante

+0

Peut vouloir étiqueter ceci avec le schéma et le dr-schéma et le devoir –

Répondre

3

Vous fondamentalement mélanger le BST que vous avez maintenant, et en créer un nouveau sans l'élément.

Vous pouvez le faire en descendant récursivement l'arbre. Si votre élément est inférieur à la référence racine, créez un BST dont la racine et la plus grande partie sont copiées à partir de ce que vous avez maintenant, mais dont la branche inférieure est le résultat d'un appel récursif.

C'est très similaire à la façon dont vous ajoutez un nœud, mais lorsque vous arrivez à celui que vous recherchez, fusionnez les deux BST en dessous et renvoyez le résultat. Il existe sûrement des questions sur la façon de le faire déjà.

2

En supposant que votre arbre de recherche binaire utilise tout droit cellules contre avec le contenu que sur les feuilles, et en supposant que vous travaillez sur une tâche de travail: Vous pouvez utiliser set-car! ou set-cdr! pour modifier le contenu d'une cellule de contre.

+0

Les cellules de consistance dans la raquette sont immuables. –

+0

mcons, set-mcar! et set-mcdr alors pour R6RS – Beef

+0

Les cellules de cons sont immuables dans Racket, pas dans R6RS (y compris l'implémentation de raquette de R6RS). Mais en général, il est préférable d'éviter ce genre d'effets secondaires - ou si vous devez le faire, alors une structure spécifique est préférable à la destruction des cellules. –