省市區結構git
實體算法
/// <summary> /// 行政區 /// </summary> public class AreaEntity { public int Id { get; set; } /// <summary> /// 名稱 /// </summary> public string RegionName { get; set; } /// <summary> /// 編碼 /// </summary> public string RegionCode { get; set; } /// <summary> /// 上級編碼 /// </summary> public string ParentCode { get; set; } public string Longitude { get; set; } public string Latitude { get; set; } } public class AreaModel { /// <summary> /// 名稱 /// </summary> public string RegionName { get; set; } /// <summary> /// 編碼 /// </summary> public string RegionCode { get; set; } /// <summary> /// 上級編碼 /// </summary> public string ParentCode { get; set; } public AreaModel[] Children { get; set; } }
C# 代碼ui
/// <summary> /// 獲取所屬獲取信息 /// </summary> /// <param name="parentCode">所屬編碼</param> /// <returns>列表</returns> public AreaEntity[] GetAreaModelList(string parentCode) { StringBuilder strSQL = new StringBuilder(); strSQL.Append(" select * from [dbo].[Area] With(nolock) "); strSQL.Append(" WHERE ParentCode=@ParentCode"); var param = new SqlParameter[] { new SqlParameter("@ParentCode",SqlDbType.VarChar) }; param[0].Value = parentCode; AreaEntity[] list = null; using (var context = new YTODBDbContext()) { list = context.Database.SqlQuery<AreaEntity>(strSQL.ToString(), param).ToArray(); } return list; } /// <summary> /// 生成樹的方法 /// </summary> /// <param name="parentCode">所屬編碼</param> /// <param name="areaModel">信息</param> /// <returns></returns> public AreaModel creatTheTree(string parentCode, AreaModel areaModel) { AreaEntity[] items = GetAreaModelList(parentCode); //若是沒有字節點了,那就返回空 if (items.Length == 0) return null; List<AreaModel> jdList = new List<AreaModel>(); for (int i = 0; i < items.Length; i++) { AreaModel jiedian = new AreaModel(); jiedian.RegionName = items[i].RegionName; jiedian.RegionCode = items[i].RegionCode; jiedian.ParentCode = items[i].ParentCode; //遞歸循環 creatTheTree(items[i].RegionCode.ToString(), jiedian); jdList.Add(jiedian); } areaModel.Children = jdList.ToArray(); return areaModel; }
接口調用編碼
public HttpResponseMessage getAreaInfo(AreaInfoViewModel req) { //var userinfo = GetCurrentLoginInfo(); //if (userinfo.RoleId != FlagMgr.UnitRole.Type.Agricultural.ToInt()) //{ // return ResponseError("權限不匹配!"); //} var AreaModel = _areaService.GetAreaModelList(req.RegionCode); var tempAreaModel = new AreaModel(); tempAreaModel.RegionName = AreaModel[0].RegionName; tempAreaModel.RegionCode = AreaModel[0].RegionCode; tempAreaModel.ParentCode = AreaModel[0].ParentCode; //遞歸樹結構 var areaModel = _areaService.creatTheTree(req.RegionCode, tempAreaModel); return ResponseOK<AreaModel>(areaModel); }
返回數據spa
{ "mStatusCode": 200, "mStatusDesc": "OK", "mDataBody": { "RegionName": "濟南市", "RegionCode": "370100", "ParentCode": "370000", "Children": [ { "RegionName": "濟南市", "RegionCode": "370100", "ParentCode": "370000", "Children": [ { "RegionName": "市轄區", "RegionCode": "370101", "ParentCode": "370100", "Children": null }, { "RegionName": "歷下區", "RegionCode": "370102", "ParentCode": "370100", "Children": null }, { "RegionName": "市中區", "RegionCode": "370103", "ParentCode": "370100", "Children": null }, { "RegionName": "槐蔭區", "RegionCode": "370104", "ParentCode": "370100", "Children": null }, { "RegionName": "天橋區", "RegionCode": "370105", "ParentCode": "370100", "Children": null }, { "RegionName": "歷城區", "RegionCode": "370112", "ParentCode": "370100", "Children": null }, { "RegionName": "長清區", "RegionCode": "370113", "ParentCode": "370100", "Children": null }, { "RegionName": "平陰縣", "RegionCode": "370124", "ParentCode": "370100", "Children": null }, { "RegionName": "濟陽縣", "RegionCode": "370125", "ParentCode": "370100", "Children": null }, { "RegionName": "商河縣", "RegionCode": "370126", "ParentCode": "370100", "Children": null }, { "RegionName": "章丘市", "RegionCode": "370181", "ParentCode": "370100", "Children": null } ] }, { "RegionName": "青島市", "RegionCode": "370200", "ParentCode": "370000", "Children": [ { "RegionName": "市轄區", "RegionCode": "370201", "ParentCode": "370200", "Children": null }, { "RegionName": "市南區", "RegionCode": "370202", "ParentCode": "370200", "Children": null }, { "RegionName": "市北區", "RegionCode": "370203", "ParentCode": "370200", "Children": null }, { "RegionName": "黃島區", "RegionCode": "370211", "ParentCode": "370200", "Children": null }, { "RegionName": "嶗山區", "RegionCode": "370212", "ParentCode": "370200", "Children": null }, { "RegionName": "李滄區", "RegionCode": "370213", "ParentCode": "370200", "Children": null }, { "RegionName": "城陽區", "RegionCode": "370214", "ParentCode": "370200", "Children": null }, { "RegionName": "膠州市", "RegionCode": "370281", "ParentCode": "370200", "Children": null }, { "RegionName": "即墨市", "RegionCode": "370282", "ParentCode": "370200", "Children": null }, { "RegionName": "平度市", "RegionCode": "370283", "ParentCode": "370200", "Children": null }, { "RegionName": "萊西市", "RegionCode": "370285", "ParentCode": "370200", "Children": null } ] }, { "RegionName": "淄博市", "RegionCode": "370300", "ParentCode": "370000", "Children": [ { "RegionName": "市轄區", "RegionCode": "370301", "ParentCode": "370300", "Children": null }, { "RegionName": "淄川區", "RegionCode": "370302", "ParentCode": "370300", "Children": null }, { "RegionName": "張店區", "RegionCode": "370303", "ParentCode": "370300", "Children": null }, { "RegionName": "博山區", "RegionCode": "370304", "ParentCode": "370300", "Children": null }, { "RegionName": "臨淄區", "RegionCode": "370305", "ParentCode": "370300", "Children": null }, { "RegionName": "周村區", "RegionCode": "370306", "ParentCode": "370300", "Children": null }, { "RegionName": "桓臺縣", "RegionCode": "370321", "ParentCode": "370300", "Children": null }, { "RegionName": "高青縣", "RegionCode": "370322", "ParentCode": "370300", "Children": null }, { "RegionName": "沂源縣", "RegionCode": "370323", "ParentCode": "370300", "Children": null } ] }, { "RegionName": "棗莊市", "RegionCode": "370400", "ParentCode": "370000", "Children": [ { "RegionName": "市轄區", "RegionCode": "370401", "ParentCode": "370400", "Children": null }, { "RegionName": "市中區", "RegionCode": "370402", "ParentCode": "370400", "Children": null }, { "RegionName": "薛城區", "RegionCode": "370403", "ParentCode": "370400", "Children": null }, { "RegionName": "嶧城區", "RegionCode": "370404", "ParentCode": "370400", "Children": null }, { "RegionName": "臺兒莊區", "RegionCode": "370405", "ParentCode": "370400", "Children": null }, { "RegionName": "山亭區", "RegionCode": "370406", "ParentCode": "370400", "Children": null }, { "RegionName": "滕州市", "RegionCode": "370481", "ParentCode": "370400", "Children": null } ] }, { "RegionName": "東營市", "RegionCode": "370500", "ParentCode": "370000", "Children": [ { "RegionName": "市轄區", "RegionCode": "370501", "ParentCode": "370500", "Children": null }, { "RegionName": "東營區", "RegionCode": "370502", "ParentCode": "370500", "Children": null }, { "RegionName": "河口區", "RegionCode": "370503", "ParentCode": "370500", "Children": null }, { "RegionName": "墾利縣", "RegionCode": "370521", "ParentCode": "370500", "Children": null }, { "RegionName": "利津縣", "RegionCode": "370522", "ParentCode": "370500", "Children": null }, { "RegionName": "廣饒縣", "RegionCode": "370523", "ParentCode": "370500", "Children": null } ] }, { "RegionName": "煙臺市", "RegionCode": "370600", "ParentCode": "370000", "Children": [ { "RegionName": "市轄區", "RegionCode": "370601", "ParentCode": "370600", "Children": null }, { "RegionName": "芝罘區", "RegionCode": "370602", "ParentCode": "370600", "Children": null }, { "RegionName": "福山區", "RegionCode": "370611", "ParentCode": "370600", "Children": null }, { "RegionName": "牟平區", "RegionCode": "370612", "ParentCode": "370600", "Children": null }, { "RegionName": "萊山區", "RegionCode": "370613", "ParentCode": "370600", "Children": null }, { "RegionName": "長島縣", "RegionCode": "370634", "ParentCode": "370600", "Children": null }, { "RegionName": "龍口市", "RegionCode": "370681", "ParentCode": "370600", "Children": null }, { "RegionName": "萊陽市", "RegionCode": "370682", "ParentCode": "370600", "Children": null }, { "RegionName": "萊州市", "RegionCode": "370683", "ParentCode": "370600", "Children": null }, { "RegionName": "蓬萊市", "RegionCode": "370684", "ParentCode": "370600", "Children": null }, { "RegionName": "招遠市", "RegionCode": "370685", "ParentCode": "370600", "Children": null }, { "RegionName": "棲霞市", "RegionCode": "370686", "ParentCode": "370600", "Children": null }, { "RegionName": "海陽市", "RegionCode": "370687", "ParentCode": "370600", "Children": null } ] }, { "RegionName": "濰坊市", "RegionCode": "370700", "ParentCode": "370000", "Children": [ { "RegionName": "市轄區", "RegionCode": "370701", "ParentCode": "370700", "Children": null }, { "RegionName": "濰城區", "RegionCode": "370702", "ParentCode": "370700", "Children": null }, { "RegionName": "寒亭區", "RegionCode": "370703", "ParentCode": "370700", "Children": null }, { "RegionName": "坊子區", "RegionCode": "370704", "ParentCode": "370700", "Children": null }, { "RegionName": "奎文區", "RegionCode": "370705", "ParentCode": "370700", "Children": null }, { "RegionName": "臨朐縣", "RegionCode": "370724", "ParentCode": "370700", "Children": null }, { "RegionName": "昌樂縣", "RegionCode": "370725", "ParentCode": "370700", "Children": null }, { "RegionName": "青州市", "RegionCode": "370781", "ParentCode": "370700", "Children": null }, { "RegionName": "諸城市", "RegionCode": "370782", "ParentCode": "370700", "Children": null }, { "RegionName": "壽光市", "RegionCode": "370783", "ParentCode": "370700", "Children": null }, { "RegionName": "安丘市", "RegionCode": "370784", "ParentCode": "370700", "Children": null }, { "RegionName": "高密市", "RegionCode": "370785", "ParentCode": "370700", "Children": null }, { "RegionName": "昌邑市", "RegionCode": "370786", "ParentCode": "370700", "Children": null } ] }, { "RegionName": "濟寧市", "RegionCode": "370800", "ParentCode": "370000", "Children": [ { "RegionName": "市轄區", "RegionCode": "370801", "ParentCode": "370800", "Children": null }, { "RegionName": "任城區", "RegionCode": "370811", "ParentCode": "370800", "Children": null }, { "RegionName": "兗州區", "RegionCode": "370812", "ParentCode": "370800", "Children": null }, { "RegionName": "微山縣", "RegionCode": "370826", "ParentCode": "370800", "Children": null }, { "RegionName": "魚臺縣", "RegionCode": "370827", "ParentCode": "370800", "Children": null }, { "RegionName": "金鄉縣", "RegionCode": "370828", "ParentCode": "370800", "Children": null }, { "RegionName": "嘉祥縣", "RegionCode": "370829", "ParentCode": "370800", "Children": null }, { "RegionName": "汶上縣", "RegionCode": "370830", "ParentCode": "370800", "Children": null }, { "RegionName": "泗水縣", "RegionCode": "370831", "ParentCode": "370800", "Children": null }, { "RegionName": "梁山縣", "RegionCode": "370832", "ParentCode": "370800", "Children": null }, { "RegionName": "曲阜市", "RegionCode": "370881", "ParentCode": "370800", "Children": null }, { "RegionName": "鄒城市", "RegionCode": "370883", "ParentCode": "370800", "Children": null } ] }, { "RegionName": "泰安市", "RegionCode": "370900", "ParentCode": "370000", "Children": [ { "RegionName": "市轄區", "RegionCode": "370901", "ParentCode": "370900", "Children": null }, { "RegionName": "泰山區", "RegionCode": "370902", "ParentCode": "370900", "Children": null }, { "RegionName": "岱嶽區", "RegionCode": "370911", "ParentCode": "370900", "Children": null }, { "RegionName": "寧陽縣", "RegionCode": "370921", "ParentCode": "370900", "Children": null }, { "RegionName": "東平縣", "RegionCode": "370923", "ParentCode": "370900", "Children": null }, { "RegionName": "新泰市", "RegionCode": "370982", "ParentCode": "370900", "Children": null }, { "RegionName": "肥城市", "RegionCode": "370983", "ParentCode": "370900", "Children": null } ] }, { "RegionName": "威海市", "RegionCode": "371000", "ParentCode": "370000", "Children": [ { "RegionName": "市轄區", "RegionCode": "371001", "ParentCode": "371000", "Children": null }, { "RegionName": "環翠區", "RegionCode": "371002", "ParentCode": "371000", "Children": null }, { "RegionName": "文登區", "RegionCode": "371003", "ParentCode": "371000", "Children": null }, { "RegionName": "榮成市", "RegionCode": "371082", "ParentCode": "371000", "Children": null }, { "RegionName": "乳山市", "RegionCode": "371083", "ParentCode": "371000", "Children": null } ] }, { "RegionName": "日照市", "RegionCode": "371100", "ParentCode": "370000", "Children": [ { "RegionName": "市轄區", "RegionCode": "371101", "ParentCode": "371100", "Children": null }, { "RegionName": "東港區", "RegionCode": "371102", "ParentCode": "371100", "Children": null }, { "RegionName": "嵐山區", "RegionCode": "371103", "ParentCode": "371100", "Children": null }, { "RegionName": "五蓮縣", "RegionCode": "371121", "ParentCode": "371100", "Children": null }, { "RegionName": "莒縣", "RegionCode": "371122", "ParentCode": "371100", "Children": null } ] }, { "RegionName": "萊蕪市", "RegionCode": "371200", "ParentCode": "370000", "Children": [ { "RegionName": "市轄區", "RegionCode": "371201", "ParentCode": "371200", "Children": null }, { "RegionName": "萊城區", "RegionCode": "371202", "ParentCode": "371200", "Children": null }, { "RegionName": "鋼城區", "RegionCode": "371203", "ParentCode": "371200", "Children": null } ] }, { "RegionName": "臨沂市", "RegionCode": "371300", "ParentCode": "370000", "Children": [ { "RegionName": "市轄區", "RegionCode": "371301", "ParentCode": "371300", "Children": null }, { "RegionName": "蘭山區", "RegionCode": "371302", "ParentCode": "371300", "Children": null }, { "RegionName": "羅莊區", "RegionCode": "371311", "ParentCode": "371300", "Children": null }, { "RegionName": "河東區", "RegionCode": "371312", "ParentCode": "371300", "Children": null }, { "RegionName": "沂南縣", "RegionCode": "371321", "ParentCode": "371300", "Children": null }, { "RegionName": "郯城縣", "RegionCode": "371322", "ParentCode": "371300", "Children": null }, { "RegionName": "沂水縣", "RegionCode": "371323", "ParentCode": "371300", "Children": null }, { "RegionName": "蘭陵縣", "RegionCode": "371324", "ParentCode": "371300", "Children": null }, { "RegionName": "費縣", "RegionCode": "371325", "ParentCode": "371300", "Children": null }, { "RegionName": "平邑縣", "RegionCode": "371326", "ParentCode": "371300", "Children": null }, { "RegionName": "莒南縣", "RegionCode": "371327", "ParentCode": "371300", "Children": null }, { "RegionName": "蒙陰縣", "RegionCode": "371328", "ParentCode": "371300", "Children": null }, { "RegionName": "臨沭縣", "RegionCode": "371329", "ParentCode": "371300", "Children": null } ] }, { "RegionName": "德州市", "RegionCode": "371400", "ParentCode": "370000", "Children": [ { "RegionName": "市轄區", "RegionCode": "371401", "ParentCode": "371400", "Children": null }, { "RegionName": "德城區", "RegionCode": "371402", "ParentCode": "371400", "Children": null }, { "RegionName": "陵城區", "RegionCode": "371403", "ParentCode": "371400", "Children": null }, { "RegionName": "寧津縣", "RegionCode": "371422", "ParentCode": "371400", "Children": null }, { "RegionName": "慶雲縣", "RegionCode": "371423", "ParentCode": "371400", "Children": null }, { "RegionName": "臨邑縣", "RegionCode": "371424", "ParentCode": "371400", "Children": null }, { "RegionName": "齊河縣", "RegionCode": "371425", "ParentCode": "371400", "Children": null }, { "RegionName": "平原縣", "RegionCode": "371426", "ParentCode": "371400", "Children": null }, { "RegionName": "夏津縣", "RegionCode": "371427", "ParentCode": "371400", "Children": null }, { "RegionName": "武城縣", "RegionCode": "371428", "ParentCode": "371400", "Children": null }, { "RegionName": "樂陵市", "RegionCode": "371481", "ParentCode": "371400", "Children": null }, { "RegionName": "禹城市", "RegionCode": "371482", "ParentCode": "371400", "Children": null } ] }, { "RegionName": "聊城市", "RegionCode": "371500", "ParentCode": "370000", "Children": [ { "RegionName": "市轄區", "RegionCode": "371501", "ParentCode": "371500", "Children": null }, { "RegionName": "東昌府區", "RegionCode": "371502", "ParentCode": "371500", "Children": null }, { "RegionName": "陽谷縣", "RegionCode": "371521", "ParentCode": "371500", "Children": null }, { "RegionName": "莘縣", "RegionCode": "371522", "ParentCode": "371500", "Children": null }, { "RegionName": "茌平縣", "RegionCode": "371523", "ParentCode": "371500", "Children": null }, { "RegionName": "東阿縣", "RegionCode": "371524", "ParentCode": "371500", "Children": null }, { "RegionName": "冠縣", "RegionCode": "371525", "ParentCode": "371500", "Children": null }, { "RegionName": "高唐縣", "RegionCode": "371526", "ParentCode": "371500", "Children": null }, { "RegionName": "臨清市", "RegionCode": "371581", "ParentCode": "371500", "Children": null } ] }, { "RegionName": "濱州市", "RegionCode": "371600", "ParentCode": "370000", "Children": [ { "RegionName": "市轄區", "RegionCode": "371601", "ParentCode": "371600", "Children": null }, { "RegionName": "濱城區", "RegionCode": "371602", "ParentCode": "371600", "Children": null }, { "RegionName": "沾化區", "RegionCode": "371603", "ParentCode": "371600", "Children": null }, { "RegionName": "惠民縣", "RegionCode": "371621", "ParentCode": "371600", "Children": null }, { "RegionName": "陽信縣", "RegionCode": "371622", "ParentCode": "371600", "Children": null }, { "RegionName": "無棣縣", "RegionCode": "371623", "ParentCode": "371600", "Children": null }, { "RegionName": "博興縣", "RegionCode": "371625", "ParentCode": "371600", "Children": null }, { "RegionName": "鄒平縣", "RegionCode": "371626", "ParentCode": "371600", "Children": null } ] }, { "RegionName": "菏澤市", "RegionCode": "371700", "ParentCode": "370000", "Children": [ { "RegionName": "市轄區", "RegionCode": "371701", "ParentCode": "371700", "Children": null }, { "RegionName": "牡丹區", "RegionCode": "371702", "ParentCode": "371700", "Children": null }, { "RegionName": "曹縣", "RegionCode": "371721", "ParentCode": "371700", "Children": null }, { "RegionName": "單縣", "RegionCode": "371722", "ParentCode": "371700", "Children": null }, { "RegionName": "成武縣", "RegionCode": "371723", "ParentCode": "371700", "Children": null }, { "RegionName": "鉅野縣", "RegionCode": "371724", "ParentCode": "371700", "Children": null }, { "RegionName": "鄆城縣", "RegionCode": "371725", "ParentCode": "371700", "Children": null }, { "RegionName": "鄄城縣", "RegionCode": "371726", "ParentCode": "371700", "Children": null }, { "RegionName": "定陶縣", "RegionCode": "371727", "ParentCode": "371700", "Children": null }, { "RegionName": "東明縣", "RegionCode": "371728", "ParentCode": "371700", "Children": null } ] } ] } }
使用過多的遞歸出現錯誤,「System.StackOverflowException」,因爲遞歸數據放在棧裏,遞歸不斷的壓棧,.NET framework Runtime 就拋出異常。blog
遞歸算法解題的運行效率較低。在遞歸調用的過程中系統爲每一層的返回點、局部量等開闢了棧來存儲。遞歸次數過多容易形成棧溢出等。遞歸