C#中遍歷TreeView的兩個常用方法
在TreeView查詢某一節點,通常有兩種方法,一種是遞迴的,一種不是遞迴,但都是深度優先演算法。其中,非遞迴方法效率高些,而遞迴演算法要簡潔一些。
第一種,遞迴演算法,程式碼如下:
private TreeNode FindNode( TreeNode tnParent, string strValue )
{
if( tnParent == null ) return null;
if( tnParent.Text == strValue ) return tnParent;
TreeNode tnRet = null;
foreach( TreeNode tn in tnParent.Nodes )
{
tnRet = FindNode( tn, strValue );
if( tnRet != null ) break;
}
return tnRet;
}
第二種,非遞迴演算法,程式碼如下:
private TreeNode FindNode( TreeNode tnParent, string strValue )
{
if( tnParent == null ) return null;
if( tnParent.Text == strValue ) return tnParent;
else if( tnParent.Nodes.Count == 0 ) return null;
TreeNode tnCurrent, tnCurrentPar;
//Init node
tnCurrentPar = tnParent;
tnCurrent = tnCurrentPar.FirstNode;
while( tnCurrent != null && tnCurrent != tnParent )
{
while( tnCurrent != null )
{
if( tnCurrent.Text == strValue ) return tnCurrent;
else if( tnCurrent.Nodes.Count > 0 )
{
//Go into the deepest node in current sub-path
tnCurrentPar = tnCurrent;
tnCurrent = tnCurrent.FirstNode;
}
else if( tnCurrent != tnCurrentPar.LastNode )
{
//Goto next sible node
tnCurrent = tnCurrent.NextNode;
}
else
break;
}
//Go back to parent node till its has next sible node
while( tnCurrent != tnParent && tnCurrent == tnCurrentPar.LastNode )
{
tnCurrent = tnCurrentPar;
tnCurrentPar = tnCurrentPar.Parent;
}
//Goto next sible node
if( tnCurrent != tnParent )
tnCurrent = tnCurrent.NextNode;
}
return null;
}
程式呼叫,如下:
TreeNode tnRet = null;
foreach( TreeNode tn in yourTreeView.Nodes )
{
tnRet = FindNode( tn, yourValue );
if( tnRet != null ) break;
}
我自己又封裝了一個呼叫的方法,用來返回布林型別:
/// <summary>
/// 查詢TreeView中是否包含指定的值(Text)
/// </summary>
/// <param name="tv">TreeView控制元件</param>
/// <param name="strValue">要查詢的值</param>
/// <returns></returns>
public static bool TreeViewFindText(TreeView tv, string strValue)
{
TreeNode tnRet = null;
foreach (TreeNode tn in tv.Nodes)
{
tnRet = FindNodeText(tn, strValue);
if (tnRet != null)
return true;
}
return false;
}
相關文章
- Python遍歷資料夾常用的兩種方法!Python
- 遍歷方法 js jquery 我 常用JSjQuery
- React中兩種遍歷資料的方法(map、forEach)React
- Java中Map的遍歷方法Java
- java8 對list集合中的物件遍歷,重新賦值兩種方法,遍歷某個屬性返回陣列Java物件賦值陣列
- 遍歷物件鍵值對的兩種方法物件
- Java中遍歷Map的兩種方法:keySet和entrySetJava
- JavaScript中遍歷的幾種方法JavaScript
- c#遍歷HashTableC#
- 面試中很值得聊的二叉樹遍歷方法——Morris遍歷面試二叉樹
- java中遍歷map的集中方法Java
- jquery中each的三種遍歷方法jQuery
- java中遍歷Map的4種方法Java
- js中我最常用的幾種遍歷處理資料的方法梳理JS
- 遍歷陣列的常用方法forEach,filter,map等陣列Filter
- JS中陣列的遍歷方法(3種)JS陣列
- 【Java中遍歷Map物件的4種方法】Java物件
- JavaScript中的12種迴圈遍歷方法JavaScript
- jQuery遍歷函式,javascript中的each遍歷jQuery函式JavaScript
- jQuery 遍歷方法jQuery
- JS中的遍歷JS
- JavaScript 中的遍歷JavaScript
- 集合index by 的遍歷方法Index
- 二叉樹的建立、前序遍歷、中序遍歷、後序遍歷二叉樹
- Java中如何遍歷Map物件的4種方法Java物件
- 在PHP中陣列遍歷的三種方法PHP陣列
- 在flask中同時遍歷兩個list中的資料並一一對應顯示Flask
- iOS開發中陣列常用的五種遍歷方式iOS陣列
- OC中陣列、字典的遍歷的三種方法陣列
- 陣列遍歷方法陣列
- jQuery遍歷-slice()方法jQuery
- Python字典的遍歷,包括key遍歷/value遍歷/item遍歷/Python
- java陣列遍歷的方法Java陣列
- Java遍歷Map集合的方法Java
- 刷題系列 - 用遞迴和遍歷兩個方法反轉一個單鏈佇列遞迴佇列
- Python中合併兩個列表常用的方法有哪些?Python
- JS中陣列與物件的遍歷方法例項JS陣列物件
- 二叉樹建立,前序遍歷,中序遍歷,後序遍歷 思路二叉樹