2017-10-20 30 views
0

En d'autres termes, renvoyez un booléen indiquant si un élément a été supprimé ou non dans l'arborescence.Existe-t-il un moyen de renvoyer le succès booléen de suppression de BST dans une traversée?

L'implémentation courante consiste à appeler find() pour voir si l'élément est dans votre arbre et retourner false si find() ne trouve pas la cible. Cela nécessite de descendre deux fois dans l'arbre: une fois pour find() et une fois pour remove(). L'une des façons consiste à définir un indicateur de champ privé que vous définissez lors de la recherche de l'élément pendant remove(). Cela semble plutôt dégoûtant. Quelqu'un a-t-il de meilleures idées?

+1

Pourquoi voudriez-vous avoir à chercher deux fois? Trouvez-le, si c'est là, retirez-le et renvoyez vrai, sinon renvoyez faux. – Blorgbeard

+0

Les suppressions de BST sont récursives. Comment pouvez-vous retourner vrai tout en retournant un nœud (pour définir la racine du nouveau sous-arbre)? – user3724404

+0

Détails d'implémentation. Parlez-vous de code spécifique? Peut-être que vous devriez le poster. – Blorgbeard

Répondre

0

Vous pouvez supprimer les éléments de la BST en une seule traversée. Il n'y a pas besoin de traverser séparé pour trouver l'élément dans le processus de suppression. Pour supprimer les éléments de la BST en une première traversée, suivez les étapes suivantes:

  1. Recherchez le noeud à supprimer.
  2. Si le nœud se trouve applique l'algorithme suppression

Pour effacer la compréhension reportez-vous enter link description here

+0

Peut-être que vous avez mal compris la question? Vous n'avez aucun moyen de savoir, en appelant cette fonction void, si un élément a été supprimé ou non de votre arbre. – user3724404