.NET Framework有Stack, Queue, List, Directory等資料結構,但很少看到Tree,主要是Tree樹的形成各有其用途,很難針對專一用途實作比較通用的Library物件。在一般AP程式裏,Tree結構是代表資料階層性,往往需要在DB->UI裏使用Recursive遞迴函式去形成Tree控件結構。
為了增加轉換效率及判斷整個Tree節點的屬性(如是否有子點),我會在DB與UI控件間使用到Tree結構的物件。以前作法是直接拿UI TreeView控件來當記錄物件,但該TreeView難免比較佔記憶體,因此就興起自己寫作一個很單純的Tree資料結構的念頭。
以Tree資料物件來說,只需要TreeNode<T>及其父子點TreeNodeCollection<T>兩個類別,即可形成一個完整的Tree結構。對任一個TreeNode節點來說,要有父節點及上下的群點,以利整顆樹的節點搜尋。
研究過程裏,發現TreeNode節點的Depth深度值的演算法挺特別的,把它節錄出來。
public int Depth
{
get
{
// ------------------------------
// Recursive algorithm.
// ------------------------------
return (this.ParentNode == null ? -1 : this.ParentNode.Depth) + 1;
// ------------------------------
// General algorithm
// ------------------------------
//int depth = 0;
//TreeNodenode = this;
//while (node.ParentNode != null)
//{
// node = node.ParentNode;
// depth++;
//}
//return depth;
}
}
No comments:
Post a Comment