web-dev-qa-db-fra.com

Un arbre peut-il être utilisé pour créer une pile?

Je suis conscient que les listes liées, les ensembles et les tableaux peuvent être utilisés pour créer eux-mêmes des piles. La théorie derrière c'est ceci

linked-list: Dans certaines langues, une liste liée est substituable pour un tableau. Les piles sont d'abord dans les opérations de première sortie.

array: les méthodes Push et pop invoquent une pile comme un comportement.

set: un ensemble est exactement identique à un tableau, sauf qu'il ne comporte pas d'éléments en double.

J'ai du mal à trouver une façon qu'un arbre puisse être utilisé pour créer une pile

4
Joseph Monroe

Trivialement.

Votre objet de pile maintient simplement un arbre d'INTS. L'opération de poussée est identique à l'insertion d'un élément de l'arborescence dont la clé est une plus grande que la clé du maximum actuel. Cela devrait être la clé de la note racine et le nouveau nœud devient la nouvelle racine.

L'opération POP est enlèvement du nœud avec la plus grande clé (la racine).

Cette approche devrait toujours fonctionner avec des arbres à équilibrer, cependant, pour ceux qui seront plus lents (puisque la clé maximale n'est plus à la racine et que l'accès à celui-ci prend une (ln n) plutôt que O (1)).

Le contenu des emplacements de pile serait simplement un contenu supplémentaire dans les nœuds de l'arbre.

2
James Youngman

Il y a une bonne réponse déjà donnée, mais vous pouvez également implémenter un tas Max-Heap, puis insérez un élément avec une priorité égale au nombre d'éléments actuellement dans votre tas.

0
Frank Bryce