码迷,mamicode.com
首页 > 其他好文 > 详细

递归遍历树结构顺序显示并且添加到list集合

时间:2015-06-16 09:12:44      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:


 /// <summary>
        /// 给流程排序 by 于連偉 2015/06/15
        /// </summary>
        /// <param name="lstNextItem">本集合的下一个集合</param>
        /// <param name="returnItem">排序后的返回集合</param>
        public static void OrderLink(List<TLink> lstNextItem, List<TLink> returnItem) 
        {
            foreach (TLink link in lstNextItem)
            {
                if (link.LinkState != "E")
                {
                    if (returnItem.Find(x => { return x.LinkGuid == link.LinkGuid; }) == null)
                    {
                        returnItem.Add(link);
                    }
                }
            }
            foreach (TLink link in lstNextItem)
            {
                if (link.LinkState != "E")
                {
                    List<TLink> newLink = ListNextLink(link.LinkGuid);
                    OrderLink(newLink, returnItem);
                }
            }
        }

        public static List<TLink> ListNextLink(string linkGuid)
        {
            using (OracleConnection conn = new OracleConnection(TDataCore.mJkConnStr))
            {
                try
                {
                    List<TLink> lst = new List<TLink>();
                    conn.Open();

                    OracleCommand cmd = conn.CreateCommand();
                    cmd.CommandText = string.Format("select {0} from t_link where linkGuid in (select endLinkGuid from t_line where startLinkGuid=:linkGuid)", m_LinkField);
                    OracleParameter param = cmd.Parameters.Add(":linkGuid", OracleDbType.Varchar2);
                    param.Value = linkGuid;
                    using (OracleDataReader dr = cmd.ExecuteReader())
                    {
                        while (dr.Read())
                        {
                            lst.Add(GetLink(dr));
                        }
                    }
                    conn.Close();
                    return lst;
                    
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    if (conn != null && conn.State != ConnectionState.Closed)
                    {
                        conn.Close();
                    }
                }
            }
        }

 

 

其中ListNextLink方法是查找下一个节点的方法,要依据实际情况自己去写出

这个递归是第一个和最后一个元素不递归,中间的每个元素都要查找出下一个元素然后循环去添加每一个递归出来的本元素的下一个元素,如果重复则不添加

递归遍历树结构顺序显示并且添加到list集合

标签:

原文地址:http://www.cnblogs.com/llcdbk/p/4579874.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!