2010-12-14 12 views
1

私は共通のデータ構造(Tree、BinaryTree、Search Binary Tree、BTree、AVLなど)を処理するためにいくつかのクラスを実装しています。ツリー情報をデータソースに格納し、それらのクラスの1つに解析する方法が必要です。最も簡単な方法は、XMLを使用することです(移植性は非常に重要です)。ことは、私が作るXML文書は読みにくいということです。彼らは十分な "直感的"ではありません。例えば、私はこのような何かをしていた。XMLでツリーを表現する最良の方法は何ですか?

<?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> 

あり、ツリーはこのようなものになるだろう:

    100 
       50    200 

あなたは何を言うのですか?他のお勧めはありますか?

答えて

5

ルート、ツリーの葉、および他のノードの間に重要な構造上の相違点はあなたの説明にはありません。

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

この構造は少しそれほど冗長であり、XMLドキュメントツリーは、あなたが表現しようとしている木をマッチングされます。そこで、彼らはすべてこの例のように、同じ内容モデルを持つことができます。あなたの値は文字列として表現することができるならば、あなたもそのようにそれを書くことができます:私の意見では

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

XMLでツリーを表現するための最良の方法はありません。それはすべてあなたのストレージを最適化したいものに依存します - 特定のノードをすばやく追跡できるようにしたいですか?そしてフラットな表現が良いかもしれません。説明を非冗長にしたい場合は、あなたが概説したメソッドはかなり良いでしょう。(おそらく私は 'root'子を属性(ルート/値)に変換します。ツリーノード)。

+0

あなたは再帰的ですか? – santiagobasulto

+0

@santiagobasulto、それは再帰的である必要はありません。あなたの表現は再帰的です(そして、私はそれを変更する唯一のものは 'root'ノードを取り除き、 'tree' "100">はツリー全体を表しています。データを格納するには、そのデータで何をしたいのか、それを最適化するのかによって異なります。 – Assaf

0

を、データ構造は、コンピュータではなく、人間には簡単であることを意味しています。人間が読める形式のデータが必要な場合は、ちょうど良い印刷visitorを作成してください。ツリー内

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

要素はノードではなく木です。ノードアセンブリ全体がツリーを構成します。

また、XMLはツリー自体であるため、明示的にモデル化する必要はありません。

関連する問題