Pages

2015-07-22

C# General Tree結構

.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節點來說,要有父節點及上下的群點,以利整顆樹的節點搜尋。

Tree Structure

Tree CodeSnippet

研究過程裏,發現TreeNode節點的Depth深度值的演算法挺特別的,把它節錄出來。

public int Depth
{
get
{
// ------------------------------
// Recursive algorithm.
// ------------------------------
return (this.ParentNode == null ? -1 : this.ParentNode.Depth) + 1;

// ------------------------------
// General algorithm
// ------------------------------
//int depth = 0;
//TreeNode node = this;
//while (node.ParentNode != null)
//{
// node = node.ParentNode;
// depth++;
//}

//return depth;
}
}

No comments: