我有一個存儲過程,它返回在樹中組織的名稱的平面列表。溝通是誰的人有一個深度值父,所以5條(上升3級)的結果是這樣的:用於將深度數組轉換爲樹的高效算法
Depth|Name
----------
0|Ford
1|Compact Cars
2|Pinto
1|Trucks
2|H-Series
我試圖通過構建一個樹出此陣讀取深度值。有沒有一些明顯的算法來構建一個像這樣的數據序列的樹?我添加了C#標籤,因爲我對LINQy解決方案對這個問題持開放態度,儘管通用的計算機科學答案會非常有幫助。
這裏是我當前的嘗試:
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級的樹木,所以真的,我只是希望的東西這更容易推理。
你嘗試過什麼? –
我目前的代碼從一個簡單的列表開始,其中Record包含名爲Children的列表。然後保留上一個深度的副本並進行測試。如果新深度等於先前它是兄弟姐妹,如果它更大,那麼ti是一個孩子,如果它小於它是最近添加的父親的兄弟姐妹。我說「嘗試」,因爲代碼變得相當混亂。 –
問題的模糊性或者福特汽車的使用是否會因此而被否決? –