web-dev-qa-db-fra.com

Stockage efficace de la matrice pour arbre binaire

Nous devons écrire les nœuds d'un arbre binaire dans un fichier. Quelle est la façon la plus efficace de l'espace d'écrire un arbre binaire. Nous pouvons le stocker en format Array avec le parent en position i et ses enfants en 2i, 2i+1. Mais cela va perdre beaucoup d'espace en cas d'arbres binaires clairsemés.

32
Sundararajan S

Pensez à XML. C'est une sorte de sérialisation des arbres. Par exemple:

<node id="1">
    <node id="2">                                   1
    </node>                                       /   \
    <node id="3">                                2     3
        <node id="4">                                 / \
        </node>                                      4   5
        <node id="5">
        </node>
    </node>
</node>

Ensuite, pourquoi les espaces et les tags? Nous pouvons les omettre, étape par étape:

<1>
   <2></>
   <3>
     <4></>
     <5></>
   </>
</>

Supprimer les espaces: <1><2></2><3><4></><5></></></>.

Retirez les crochets d'angle: 12/34/5///

Maintenant, le problème est le suivant: Que se passe-t-il si un nœud a un sous-arbre à gauche vide et un sous-arbre de droite non vide? Ensuite, nous pouvons utiliser un autre charactère spécial, '#' pour représenter un sous-arbre gauche vide.

Par exemple:

    1
  /   \
      2
     /  \
    3

Cet arbre peut être sérialisé comme suit: 1#23///.

5
Ray

La méthode 2i, 2i + 1 (heap binaire) est en effet la meilleure façon si vous avez un arbre (presque) complet.

Sinon, vous n'échappez pas à stocker un parentid (index parent) avec chaque nœud.

4
Henk Holterman

Vous pouvez enregistrer le in-order et pre/post-order Traversal de l'arbre binaire dans le fichier et reconstruit l'arbre de ces travers.

1
codaddict