• C#中遍历TreeView的两个常用方法(转帖)


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

    第一种,递归算法   

    第二种,非递归算法   

           程序调用,如下:

          

    TreeNode tnRet = null;

            
    foreach( TreeNode tn in yourTreeView.Nodes )

             {

                 tnRet
    =   FindNode( tn, yourValue );

                
    if( tnRet != null ) break;

             }
    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;

         }
    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;

         }
  • 相关阅读:
    MySQL DATE_ADD() 函数
    今天一早来打开IDEA,全面飘红,所有的含有import语句的文件都会报错
    Spring cloud Eureka注册中心搭建的方法Spring cloud Eureka注册中心搭建的方法
    Spring Cloud Config配置中心
    在IDEA下导入Maven项目之后 Dependencies报红线
    解决idea项目没有蓝色小方块
    idea 导入源码显示橙色
    MYSQL中的UNIX_TIMESTAMP函数
    kernel 文件系统挂载流程分析【转】
    Linux--根文件系统的挂载过程分析【转】
  • 原文地址:https://www.cnblogs.com/bayonetxxx/p/1378242.html
Copyright © 2020-2023  润新知