zoukankan      html  css  js  c++  java
  • 递归遍历树结构顺序显示并且添加到list集合

    
    
     /// <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方法是查找下一个节点的方法,要依据实际情况自己去写出

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

  • 相关阅读:
    【经典数据结构】B树与B+树
    【经典算法】线性时间排序
    【经典算法】归并排序
    【经典算法】快速排序
    python模块之shelve
    python模块之pickle
    python模块之json
    python之序列化
    python模块之shutil和zipfile
    python模块之sys
  • 原文地址:https://www.cnblogs.com/llcdbk/p/4579874.html
Copyright © 2011-2022 走看看