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

  • 相关阅读:
    《数据库原理》课程笔记 (Ch04-数据库管理系统)
    《数据库原理》课程笔记 (Ch03-数据库语言)
    《操作系统》课程笔记(Ch07-死锁)
    《数据库原理》课程笔记 (Ch02-数据模型)
    《数据库原理》课程笔记 (Ch01-引论)
    《计算机网络》课程笔记 (Ch02-应用层)
    《ES6标准入门》读书笔记 第5章
    《ES6标准入门》读书笔记 第4章
    《ES6标准入门》读书笔记 第3章
    《计算机网络》课程笔记 (Ch01-计算机网络和因特网)
  • 原文地址:https://www.cnblogs.com/symbol441/p/1015715.html
Copyright © 2011-2022 走看看