3 votes

Déterminer l'équivalence structurelle des BST avec une traversée standard

Est-il possible de décider de l'équivalence structurelle de deux arbres de recherche binaires juste avec les résultats des traversées, pre order, in order et post order. Supposons que je n'ai que les tableaux de résultats de toutes les traversées. Je sais que la traversée en ordre seule ne peut pas aider. Mais, je ne pouvais pas visualiser les résultats des autres traversées. Je comprends que BFS aide. Je veux savoir ce qu'il en est pour les traversées pré et post ordonnées. Et si possible, veuillez poster des liens sur ce sujet.

3voto

hivert Points 7080

La réponse est : on peut récupérer un arbre de recherche binaire à partir de sa traversée pré-ordonnée .

Je ne suis pas sûr de votre formation mathématique, alors n'hésitez pas à demander plus d'explications si vous en avez besoin.

Pour simplifier, je suppose que les nœuds sont étiquetés par l'entier 1,2... n où n est le nombre de nœuds. Alors la traversée en pré-ordre de l'arbre t donne une permutation de [n] = {1,2,...,n} qui ont une propriété particulière : chaque fois que vous avez une lettre b dans votre permutation, vous ne pouvez pas trouver deux lettres consécutives ca après le b dans la permutation telle que a<b<c . On dit d'une telle permutation qu'elle éviter le motif b-ac (les - représentent un nombre arbitraire de lettres).

Par exemple, 4 2 1 3 évite b-ac alors que 3 1 4 2 ne le fait pas car 3 - 4 2.

Il s'agit en fait d'une équivalence : Une permutation est la lecture pré-ordonnée d'un arbre s'il est évité b-ac.

On sait qu'il existe autant d'arbres de taille n que de permutations évitant b-ac ; il s'agit donc d'une bijection. Leur nombre est connu sous le nom de nombre catalan. Vous pouvez probablement trouver cela comme exercice dans le livre de Stanley "enumerative combinatorics".

Voici une explication plus algorithmique :

RecTree: Recovering a tree from is Pre-order traversal:

input: list l
output: tree t

b <- l[0]
find an index i such that 
   - for 1<=j<=i then l[j] < b and
   - for i<j<=n  then l[j] > b
if there isn't exists such an index return Failure
else return Node(key=b, RecTree(l[1..i]), RecTree(l[i+1..n]))

En conséquence

Deux arbres de recherche binaires sont égaux si et seulement s'ils ont la même traversée préordonnée.

Est-ce que cela a un sens pour vous ?

Quelques références supplémentaires

0voto

jgroenen Points 954

Dans une BST, vous pouvez aller à gauche enfant (L), à droite enfant (R) ou en haut (U). Une traversée peut alors être décrite par une chaîne sur {L, R, U}, par exemple "LLURUURLURUU". Pour des BSTs avec des structures équivalentes, ces chaînes seront identiques.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X