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

            }


    源自:http://blog.csdn.net/Knight94/archive/2006/03/29/642736.aspx

  • 相关阅读:
    Dynamic attention in tensorflow
    Dynamic seq2seq in tensorflow
    Tensorflow Seq2seq attention decode解析
    zz图像卷积与滤波的一些知识点
    Android SDK更新失败对策
    高维数据降维 国家自然科学基金项目 2009-2013 NSFC Dimensionality Reduction
    近期深度学习论文汇总
    PHP远程连接mysql报错处理办法
    zz 启动Matlab提示Microsoft Visual C++ 2005 Redistributable存在问题问题
    `fw服务端非完整` 工程开发初期的工作
  • 原文地址:https://www.cnblogs.com/symbol441/p/1015715.html
Copyright © 2011-2022 走看看