zoukankan      html  css  js  c++  java
  • 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;

         }
  • 相关阅读:
    Oracle连接数过多释放机制
    Sql优化(三) 关于oracle的并发
    查询Oracle正在执行的sql语句
    odi增量更新策略
    如何查询Oracle性能监控
    Oratop工具——实时数据库性能监控工具
    Oracle超出最大连接数问题及解决
    oracle查看允许的最大连接数和当前连接数等信息
    八大算法思想
    面向切面编程的解释
  • 原文地址:https://www.cnblogs.com/bayonetxxx/p/1378242.html
Copyright © 2011-2022 走看看