Wenn ich speichern eines binären Baums in ein array, wie kann ich vermeiden, der Platz verschwendet?

Oft müssen wir Bäume in algorithmen und habe ich einen Baum mit vielen Zeiger und Rekursion.

Manchmal brauche ich mehr speed ein ich den Baum in ein 2D-array in etwa so:

Example of a binary tree stored in an array
+-----------------+
|0eeeeeeeeeeeeeeee| //no pointers needed, parent/child, is y dimension,
|11       dddddddd| //sibbling is x dimension of the array.
|2222         cccc|  //The 123 tree is stored root up.
|33333333       bb|  //Notice how the abc-tree is stored upside down 
|4444444444444444a|  //The wasted space in the middle, is offset by the fact 
+-----------------+  //that you do not need up, down, and sibbling pointers.

Ich Liebe diese Struktur, denn es ermöglicht mir, speed-up-Optionen, die ich nicht habe, wenn es über Zeiger und Rekursion.

Aber beachten Sie, dass Leerraum in der Mitte....

Wie kann ich Sie entfernen/wiederverwenden, dass Platz verschwendet?

Anforderungen

Ich verwende nur diese Struktur, wenn ich das Letzte Quäntchen Geschwindigkeit, so dass eine Lösung mit vielen übersetzungen und Adresse Berechnungen zu diesem Raum zu gelangen, wird nicht hilfreich sein.

  • die Antwort ist gut. Wenn ich bin, nachdem das Letzte Quäntchen Geschwindigkeit, die ich bereit bin zu opfern, Platz - sogar einen Faktor von 2.
InformationsquelleAutor Johan | 2011-06-17
Schreibe einen Kommentar