2010-12-14 16 views
1

Ich implementiere einige Klassen, um die gemeinsamen Datenstrukturen zu behandeln (Baum, BinaryTree, Binärbaum suchen, BTree, AVL, etc). Ich möchte eine Möglichkeit, Bauminformationen in einer Datenquelle zu speichern und sie in einer dieser Klassen zu analysieren. Der einfachste Weg ist die Verwendung von XML (Portabilität ist sehr wichtig). Die Sache ist, dass die XML-Dokumente, die ich mache, nicht einfach zu lesen sind. Sie sind nicht genug "intuitiv". Zum Beispiel wurde ich etwas wie folgt aus:Wie lässt sich ein Baum am besten mit XML darstellen?

<?xml version="1.0" encoding="UTF-8"?> 
<tree> 
    <root>100</root> 
    <node> 
     <tree> 
      <root>50</root>  
     </tree> 
    </node> 
    <node> 
     <tree> 
      <root>200</root>   
     </tree> 
    </node> 
</tree> 

Es würde der Baum so etwas wie dieses:

    100 
       50    200 

Was sagen Sie? Hast du eine andere Empfehlung?

Antwort

5

Ich sehe in Ihrer Beschreibung keinen wichtigen strukturellen Unterschied zwischen der Wurzel, den Blättern des Baumes und anderen Knoten. So konnten sie alle haben das gleiche Content-Modell, wie in diesem Beispiel:

<tree> 
    <value>100</value> 
    <tree> 
     <value>50</value> 
    </tree> 
    <tree> 
     <value>200</value> 
    </tree> 
</tree> 

Diese Struktur etwas weniger ausführlich ist, und die XML-Dokumentstruktur wird passend zu dem Baum Sie darstellen mögen. Wenn Ihre Werte können als Strings ausgedrückt werden, könnten Sie sogar es so schreiben:

<tree> 
    100 
    <tree>50</tree> 
    <tree>200</tree> 
</tree> 
2

Es gibt keine "beste" Möglichkeit, einen Baum in XML darzustellen. Es kommt darauf an, wofür Sie Ihren Speicher optimieren wollen - wollen Sie schnell einen bestimmten Knoten ausfindig machen können? Dann könnte eine flache (er) Darstellung besser sein. Wenn Sie die Beschreibung nicht ausführlich halten wollen, dann ist die Methode, die Sie beschrieben haben, ziemlich gut (obwohl ich wahrscheinlich das root-Kind in ein Attribut (root/value) verwandeln würde, so dass jeder Knoten in der xml tatsächlich ein ist Baumknoten).

+0

Sie sagen rekursiv? – santiagobasulto

+0

@santiagobasulto, es muss nicht rekursiv sein - Ihre Repräsentation ist rekursiv (und das einzige, was ich damit ändern würde, ist, den 'root' Knoten loszuwerden und nur 'tree' Knoten zu verwenden, zB: würde deinen gesamten Baum so darstellen. " Aber der Punkt, den ich versuchte zu machen war, dass es viele andere legitime Wege gibt Zum Speichern der Daten kommt es darauf an, was Sie damit machen wollen und wofür Sie es optimieren möchten. – Assaf

0

Meiner Meinung nach, Datenstrukturen sollen auf dem Computer einfach sein, nicht ein Mensch. Wenn Sie eine menschenlesbare Version der Daten wünschen, erstellen Sie einfach einen hübschen Ausdruck visitor.

1
<node value="100"> 
    <node value="50" /> 
    <node value="200" /> 
</node> 

Elemente im Baum sind Knoten, keine Bäume. Die gesamte Knotenanordnung bildet einen Baum.

Auch XML ist selbst ein Baum, so dass Sie es nicht explizit modellieren müssen.

Verwandte Themen