我正在ASP.Net頁面上工作,並且裏面有一個樹形視圖。在樹視圖中,一些節點具有像分支一樣的嵌套節點。我有數據在以下格式的自定義對象的列表:用循環替換遞歸
ID,描述,parentId的
現在,我使用的是函數遞歸節點添加到樹視圖。以下是代碼片段:
private bool findParentAddNode(string id, string description, string parentid, ref List<CustomTreeNode> treeList)
{
bool isFound = false;
foreach (CustomTreeNode node in treeList)
{
if (node.id == parentid)//if current node is parent node, add in it as its child
{
node.addChild(id, description, parentid);
isFound = true;
break;
}
else if (node.listOfChildNodes != null)//have child nodes
{
isFound = findParentAddNode(id, description, parentid, ref node.listOfChildNodes);
if (isFound)
break;
}
}
return isFound;
}
上述技術運行良好,但對於多於30K的節點,其性能很慢。請建議一個算法來用循環替換這個遞歸調用。
你確定遞歸是問題嗎?除非你的樹形狀很奇怪,不應該是那麼多層次。 – millimoose 2013-02-16 12:44:29
我相信'for loops'在30K節點上仍然會很慢。如果不使用相同參數調用函數,則遞歸方法很好 – ogzd 2013-02-16 12:44:52
注意:您可能會將數據源列表視爲也包含三列和未排序數據的表。 – 2013-02-16 12:46:47