您的位置:首页 > 编程语言 > C#

如何在C#中实现treeview查找某一节点

2007-09-16 13:05 573 查看
在TreeView查找某一节点,通常有两种方法,一种是递归的,一种不是递归,但都是深度优先算法。其中,非递归方法效率高些,而递归算法要简洁一些。

第一种,递归算法,代码如下:
[align=left] private TreeNode FindNode( TreeNode tnParent, string strValue )[/align]
[align=left] {[/align]
[align=left] if( tnParent == null ) return null;[/align]
[align=left] if( tnParent.Text == strValue ) return tnParent;[/align]
[align=left] [/align]
[align=left] TreeNode tnRet = null;[/align]
[align=left] foreach( TreeNode tn in tnParent.Nodes )[/align]
[align=left] {[/align]
[align=left] tnRet = FindNode( tn, strValue );[/align]
[align=left] if( tnRet != null ) break;[/align]
[align=left] }[/align]
[align=left] return tnRet;[/align]
[align=left] }[/align]

第二种,非递归算法,代码如下:
[align=left] private TreeNode FindNode( TreeNode tnParent, string strValue )[/align]
[align=left] {[/align]
[align=left] if( tnParent == null ) return null;[/align]
[align=left] [/align]
[align=left] if( tnParent.Text == strValue ) return tnParent;[/align]
[align=left] else if( tnParent.Nodes.Count == 0 ) return null;[/align]
[align=left] [/align]
[align=left] TreeNode tnCurrent, tnCurrentPar;[/align]
[align=left] [/align]
[align=left] //Init node[/align]
[align=left] tnCurrentPar = tnParent;[/align]
[align=left] tnCurrent = tnCurrentPar.FirstNode;[/align]
[align=left] [/align]
[align=left] while( tnCurrent != null && tnCurrent != tnParent )[/align]
[align=left] {[/align]
[align=left] while( tnCurrent != null )[/align]
[align=left] {[/align]
[align=left] if( tnCurrent.Text == strValue ) return tnCurrent;[/align]
[align=left] else if( tnCurrent.Nodes.Count > 0 ) [/align]
[align=left] {[/align]
[align=left] //Go into the deepest node in current sub-path[/align]
[align=left] tnCurrentPar = tnCurrent;[/align]
[align=left] tnCurrent = tnCurrent.FirstNode;[/align]
[align=left] }[/align]
[align=left] else if( tnCurrent != tnCurrentPar.LastNode )[/align]
[align=left] {[/align]
[align=left] //Goto next sible node [/align]
[align=left] tnCurrent = tnCurrent.NextNode;[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] break;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] //Go back to parent node till its has next sible node[/align]
[align=left] while( tnCurrent != tnParent && tnCurrent == tnCurrentPar.LastNode )[/align]
[align=left] {[/align]
[align=left] tnCurrent = tnCurrentPar;[/align]
[align=left] tnCurrentPar = tnCurrentPar.Parent;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] //Goto next sible node[/align]
[align=left] if( tnCurrent != tnParent )[/align]
[align=left] tnCurrent = tnCurrent.NextNode;[/align]
[align=left] }[/align]
[align=left] return null;[/align]
[align=left] }[/align]

程序调用,如下:
[align=left] TreeNode tnRet = null;[/align]
[align=left] foreach( TreeNode tn in yourTreeView.Nodes )[/align]
[align=left] {[/align]
[align=left] tnRet = FindNode( tn, yourValue );[/align]
[align=left] if( tnRet != null ) break;[/align]
[align=left] }[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: