您的位置:首页 > 其它

在TreeView查找某一节点

2016-12-08 16:00 281 查看
在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);

                }

pr

ivate 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;

        }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: