在TreeView查找某一节点

    xiaoxiao2021-12-15  21

    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 = FindNodeExt( 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 =  FindNodeExt( tn, yourValue );

                if( tnRet != null ) break;

            }

    遍历Treeview的所有节点(包括子节点)添加到新的treeview中 C#

    foreach (TreeNode item in treeView1.Nodes)//遍历Treeview的所有节点                 {                     TreeNode node =GetNode(item);//遍历子节点                     treeView2.Nodes.Add(node);                 } private TreeNode GetNode(TreeNode node)         {             if (node.Nodes.Count == 0)                 return new TreeNode(node.Text);             TreeNode ns = new TreeNode(node.Text);             foreach (TreeNode item in node.Nodes)             {                 TreeNode n = GetNode(item);                                ns.Nodes.Add(n);             }             return ns;         }

    转载请注明原文地址: https://ju.6miu.com/read-1000130.html

    最新回复(0)