• <转>如何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

  • 相关阅读:
    java连接zookeeper实现zookeeper的基本操作
    spring boot 中用@value给static变量赋值
    jquery 点击移动一次body
    Javascript实现导航锚点滚动效果实例
    vue.js 脚手架vue-cli构建了项目,想去除Eslint验证,如何设置?
    jquery 点击切换值
    js同时(onclick)调用多个方法
    修改输入框placeholder文字默认颜色css用法
    js获取星期几
    js计算器
  • 原文地址:https://www.cnblogs.com/symbol441/p/1015715.html
Copyright © 2020-2023  润新知