ツリーに編成された名前のフラットリストを返すストアドプロシージャがあります。Depth値が存在する親が誰であるかを伝えるために、5つのレコード(3レベルまで)の結果は次のようになります。
Depth|Name
----------
0|Ford
1|Compact Cars
2|Pinto
1|Trucks
2|H-Series
深さの値を読み取って、この配列からツリーを構築しようとしています。このような一連のデータからツリーを構築するための明らかなアルゴリズムはありますか?一般的なコンピュータサイエンスの回答は非常に役立ちますが、この問題に対するLINQyソリューションを受け入れているため、C#タグを追加しています。
これが私の現在の試みです:
class Record
{
public string Name{ get; set; }
public List<Record> children { get; set; }
}
var previousLevel = 0;
var records = new List<Record>();
foreach (var thing in TreeFactory.fetch(dao))
{
if(this.Depth == 0) {
//Root node
} else if(thing.Depth > previousLevel) {
//A Child of the last added node
} else if(thing.Depth < previousLevel) {
//A Cousin of the last added node
} else {
//A Sibling of the of the last added node
}
previousLevel = this.Depth;
}
「効率的」とは、最大200,000要素のリストサイズと最大100レベルに及ぶツリーを指しているので、実際には、より簡単に推論できるものを探しています。