2011-04-12 6 views
2

Dans le code de suppression de here.Ne pas comprendre cet algorithme d'exemple Binary Search Tree (BST)

Je ne comprends pas le premier extrait de code de suppression (où le noeud n'a pas deux enfants).

Si le nœud en cours de suppression a un parent et un enfant lui-même (à savoir le noeud a un enfant), comment cela fonctionne?

Le code supprime simplement le nœud et ne définit pas les pointeurs du parent sur l'enfant maintenant orphelin.

Ai-je raté quelque chose?

Répondre

1

Je peux me tromper, mais le code sur le site référencé semble OK. Je ne l'ai pas testé, cependant.

Cela est vrai car la fonction de suppression prend un argument de type BSTNode ** node. Ce n'est PAS un pointeur vers le noeud. Ceci est un pointeur au pointeur de nœud du parent vers le nœud lui-même. Cela peut être un peu bâclé, mais je dois admettre qu'après avoir réalisé ce que fait le code, c'est une solution élégante à sa manière. Alors, quand vous réécrivez (* nœud), vous n'êtes pas réécrire le nœud se, au lieu que vous réécrivez pointeur de parent du nœud au nœud. Effectivement, le code fait ce que vous avez suggéré d'une manière un peu perverse: D. J'espère que vous avez compris ce que je voulais dire et j'espère que j'ai bien compris.

Je vous recommande également de lire davantage sur les arbres rouge-noir, puisque cet article donne un aperçu uniquement de créant l'arbre, mais la structure décrite n'a pas de limites asymptotiques pour sa hauteur. Si, par exemple. vous poussez des valeurs triées dans cette structure, ce sera une liste connectée au lieu d'un arbre équilibré.