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.
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.
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à.
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.
Les cellules de consistance dans la raquette sont immuables. –
mcons, set-mcar! et set-mcdr alors pour R6RS – Beef
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. –
C'est complètement une question d'implémentation. Comment représentez-vous la BST? – Svante
Peut vouloir étiqueter ceci avec le schéma et le dr-schéma et le devoir –