成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#遞歸樹實現實例簡析

開發 后端
C#遞歸樹實現實例主要向你介紹了通過遞歸算法的使用來實現數據庫數據的兩種具體的實現方法,那么本問就向你介紹具體的實現過程。

C#遞歸樹實現實例是如何辦到的呢?這里我們使用遞歸來實現對于數據的樹形結構的呈現,那么關于遞歸的方向我們向你介紹兩個,一個是從父節點出發,一個是反向的實現,讓我們看看具體的實現步驟吧:

C#遞歸樹實現實例:從父結點加字節點,注釋的是把字節點向父結點上加

  1. //將數據填充到dataTable  
  2. DataTable mytable = new DataTable();  
  3. //構建表結構  
  4. DataRow myRow;  
  5. DataColumn Id = new DataColumn("Id"typeof(System.Int32));  
  6. mytable.Columns.Add(Id);  
  7. DataColumn Name = new DataColumn("Name"typeof(System.String));  
  8. mytable.Columns.Add(Name);  
  9. DataColumn ParentId = new DataColumn("ParentId"typeof(System.Int32));  
  10. mytable.Columns.Add(ParentId);  
  11. DataColumn SiteInfo = new DataColumn("SiteInfo"typeof(SiteInfo));  
  12. mytable.Columns.Add(SiteInfo);  
  13. //填充數據  
  14. //注意i是從1開始的,因為數據庫收條沒有意義,  
  15. //數據庫首條記錄id為0,會引起死循環  
  16. for (int i = 1; i <= cata.Length - 1; i++)  
  17. {  
  18.  myRow = mytable.NewRow();  
  19.  myRow["Id"] = cata[i].Id;  
  20.  myRow["Name"] = cata[i].Name;  
  21.  myRow["ParentId"] = cata[i].ParentId;  
  22.  myRow["SiteInfo"] = cata[i].SiteInfo;  
  23.  
  24.  mytable.Rows.Add(myRow);  
  25. }  
  26.  
  27.  
  28. this.InitTree(newNode.ChildNodes, 0, mytable);  
  29.     
  30.  
  31. //Hashtable ht = new Hashtable();  
  32.  
  33. //for (int i = 1; i < cata.Length; i++)  
  34. //{  
  35. // ht.Add(cata[i].Id, cata[i]);  
  36. //}  
  37.  
  38.  
  39. //Hashtable allTreeNodes = new Hashtable();  
  40. //Hashtable parentNodes = new Hashtable();  
  41. ////遍歷樹節點描述并擬向生成樹結構  
  42. //foreach (DictionaryEntry dict in ht)  
  43. //{  
  44. // CatalogInfo treeobj = (CatalogInfo)dict.Value;  
  45. // if (allTreeNodes.Contains(treeobj.Id))  
  46. //  continue;  
  47. // TreeNode tn = new TreeNode();  
  48. // tn.Text = treeobj.Name;  
  49. // tn.Value = treeobj.Id.ToString();  
  50. // tn.NavigateUrl = "main_right.aspx?catalogid=" + tn.Value;  
  51. // tn.Target = "WorkArea";  
  52. // generateParentTreeFromNode(  
  53. tn, (CatalogInfo)treeobj, ht, parentNodes, allTreeNodes);  
  54. //}  
  55.  
  56. ////將所有根節點放到treeview上  
  57. //foreach (DictionaryEntry dict in parentNodes)  
  58. //{  
  59. // newNode.ChildNodes.Add((TreeNode)dict.Value);  
  60. //}  
  61.   }  
  62. }  
  63.  private void InitTree(TreeNodeCollection Nds,   
  64. int parentID, DataTable dt)//遞歸初始化樹  
  65.  {  
  66.   TreeNode tmpNd;  
  67.   //遞歸尋找子節點  
  68.   DataRow[] rows = dt.Select("ParentID=" + parentID);  
  69.   foreach (DataRow row in rows)  
  70.   {  
  71. tmpNd = new TreeNode();  
  72. tmpNd.Value = row["Id"].ToString();  
  73. tmpNd.Text = row["Name"].ToString();  
  74. tmpNd.NavigateUrl = "main_right.aspx?catalogid=" 
  75. + row["Id"].ToString() + "&catalogName=  
  76. " +Server.UrlEncode(row["Name"].ToString());  
  77. tmpNd.Target = "WorkArea";  
  78. Nds.Add(tmpNd);  
  79.  
  80. InitTree(tmpNd.ChildNodes, Convert.ToInt32(tmpNd.Value), dt);  
  81.   }  
  82.  }  

C#遞歸樹實現實例:從子節點出發考慮

  1. /// <summary>  
  2. /// 反向樹生成算法  
  3. /// </summary>  
  4. /// <param name="subtr">子節點</param>  
  5. /// <param name="subto">子節點描述對象</param>  
  6. /// <param name="hashedTreeObject">被保存到哈希表中的子節點描述</param>  
  7. /// <param name="hashedParents">被保存到哈希表中的父節點描述</param>  
  8. /// <param name="allTreeNodes">被保存到哈希表中的所有節點描述</param>  
  9. private void generateParentTreeFromNode(  
  10. TreeNode subtr, CatalogInfo subto, Hashtable hashedTreeObject,   
  11. Hashtable hashedParents, Hashtable allTreeNodes)  
  12. {  
  13.  
  14.  TreeNode trParent;  
  15.  if (null == hashedTreeObject)  
  16.   return;  
  17.  //確定父結點是否存在  
  18.  if (!hashedTreeObject.Contains(  
  19. subto.ParentId) || subto.ParentId == subto.Id )  
  20.  {  
  21.   //不存在則將當前節點作為根  
  22.   if (hashedParents == null)  
  23. hashedParents = new Hashtable();  
  24.   if (!hashedParents.Contains(subto.ParentId))  
  25.   {  
  26. hashedParents.Add(subto.Id, subtr);  
  27. if (!allTreeNodes.Contains(subto.Id))  
  28.  allTreeNodes.Add(subto.Id, subtr);  
  29. trParent = subtr;  
  30.   }  
  31.  }  
  32.  else 
  33.  {  
  34.   //若存在,則獲取父結點  
  35.   CatalogInfo to = (CatalogInfo)hashedTreeObject[subto.ParentId];  
  36.   //判斷父結點是否已經被保存到樹節點的哈希表中  
  37.   if (allTreeNodes.Contains(subto.ParentId))  
  38.   {  
  39. //if (allTreeNodes.Contains(subto.Id))  
  40. // return;  
  41. trParent = (TreeNode)allTreeNodes[subto.ParentId];  
  42. trParent.ChildNodes.Add(subtr);  
  43.   }  
  44.   else 
  45.   {  
  46. //父結點不存在于哈希表中,創建父結點并存放到葉子哈希表中  
  47. trParent = new TreeNode();  
  48. trParent.Text = to.Name;  
  49. trParent.Value = to.Id.ToString();  
  50. allTreeNodes.Add(subto.ParentId, trParent);  
  51. trParent.ChildNodes.Add(subtr);  
  52. //遞歸向上查找  
  53. generateParentTreeFromNode(trParent, to,   
  54. hashedTreeObject, hashedParents, allTreeNodes);  
  55. if (!allTreeNodes.Contains(subto.Id))  
  56.  allTreeNodes.Add(subto.Id, subtr);  
  57.   }  
  58.  
  59.  }  
  60. }  

C#遞歸樹實現實例的基本內容就向你介紹到這里,希望對你了解和學習C#遞歸樹的實現有所幫助。

【編輯推薦】

  1. C#遞歸算法理解的實例分析
  2. C#遞歸思路的使用實例詳解
  3. C#遞歸函數應用實例解析
  4. DropDownList顯示的C#遞歸實現淺析
  5. C#treeview遞歸操作數據庫淺析
責任編輯:仲衡 來源: 博客園
相關推薦

2009-08-13 14:36:40

C#結構體構造函數

2009-08-12 16:38:35

C#讀取XML節點

2009-08-13 15:48:57

C#指針

2009-09-03 17:10:57

2009-09-01 16:59:25

C#畫直線

2009-08-13 10:27:28

C#讀取Excel數據

2009-08-17 14:41:47

C#進度條實現

2009-08-27 18:09:49

C#接口的實現

2009-09-01 13:59:01

C#操作Excel

2009-09-09 12:55:59

C# TextBox事

2009-08-20 09:58:06

C#操作文本文件

2009-09-03 17:06:17

C#回車切換焦點

2009-09-03 17:23:45

C#發送郵件

2009-09-02 16:14:21

C#動態創建數組

2009-08-12 10:07:51

C#運算符

2009-08-14 09:50:46

C#復制構造函數

2009-08-17 17:15:48

C# 進度條效果

2009-09-03 14:20:21

C#日期格式化

2009-08-31 12:31:45

C#創建文件夾

2009-09-03 12:52:50

C#打開記事本
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久99精品久久久久久青青日本 | 不卡在线一区 | 99久久精品免费 | 日韩在线免费看 | 精品成人av | 日韩精品在线看 | 男人久久天堂 | 婷婷精品 | 免费毛片网 | 91久久久久久久久久久久久 | 狠狠骚| 日韩中文字幕一区二区 | 91视频久久 | 一区二区三区四区免费视频 | 亚洲久草 | 男人天堂网址 | 99久久精品免费看国产四区 | 欧美黄色性生活视频 | 成人性视频在线 | 日韩精品在线视频 | 毛片免费在线 | 91在线视频免费观看 | 国产亚洲精品美女久久久久久久久久 | 美女张开腿露出尿口 | 亚洲成人精品在线 | 日韩精品久久久久 | 免费一级毛片 | 日韩av在线一区 | 97色在线视频 | 精品一区二区三区在线观看国产 | 一区二区三区av | 欧美成人专区 | 精品一区二区视频 | 欧美日韩精品中文字幕 | 成人免费xxxxx在线视频 | 欧美日本在线观看 | 精品日韩一区二区 | 91精品国产综合久久久动漫日韩 | 亚洲欧美中文日韩在线v日本 | 成人在线免费观看视频 | 99久久婷婷国产综合精品电影 |