自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#遞歸樹實(shí)現(xiàn)實(shí)例簡析

開發(fā) 后端
C#遞歸樹實(shí)現(xiàn)實(shí)例主要向你介紹了通過遞歸算法的使用來實(shí)現(xiàn)數(shù)據(jù)庫數(shù)據(jù)的兩種具體的實(shí)現(xiàn)方法,那么本問就向你介紹具體的實(shí)現(xiàn)過程。

C#遞歸樹實(shí)現(xiàn)實(shí)例是如何辦到的呢?這里我們使用遞歸來實(shí)現(xiàn)對于數(shù)據(jù)的樹形結(jié)構(gòu)的呈現(xiàn),那么關(guān)于遞歸的方向我們向你介紹兩個,一個是從父節(jié)點(diǎn)出發(fā),一個是反向的實(shí)現(xiàn),讓我們看看具體的實(shí)現(xiàn)步驟吧:

C#遞歸樹實(shí)現(xiàn)實(shí)例:從父結(jié)點(diǎn)加字節(jié)點(diǎn),注釋的是把字節(jié)點(diǎn)向父結(jié)點(diǎn)上加

  1. //將數(shù)據(jù)填充到dataTable  
  2. DataTable mytable = new DataTable();  
  3. //構(gòu)建表結(jié)構(gòu)  
  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. //填充數(shù)據(jù)  
  14. //注意i是從1開始的,因?yàn)閿?shù)據(jù)庫收條沒有意義,  
  15. //數(shù)據(jù)庫首條記錄id為0,會引起死循環(huán)  
  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. ////遍歷樹節(jié)點(diǎn)描述并擬向生成樹結(jié)構(gòu)  
  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. ////將所有根節(jié)點(diǎn)放到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.   //遞歸尋找子節(jié)點(diǎn)  
  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#遞歸樹實(shí)現(xiàn)實(shí)例:從子節(jié)點(diǎn)出發(fā)考慮

  1. /// <summary>  
  2. /// 反向樹生成算法  
  3. /// </summary>  
  4. /// <param name="subtr">子節(jié)點(diǎn)</param>  
  5. /// <param name="subto">子節(jié)點(diǎn)描述對象</param>  
  6. /// <param name="hashedTreeObject">被保存到哈希表中的子節(jié)點(diǎn)描述</param>  
  7. /// <param name="hashedParents">被保存到哈希表中的父節(jié)點(diǎn)描述</param>  
  8. /// <param name="allTreeNodes">被保存到哈希表中的所有節(jié)點(diǎn)描述</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.  //確定父結(jié)點(diǎn)是否存在  
  18.  if (!hashedTreeObject.Contains(  
  19. subto.ParentId) || subto.ParentId == subto.Id )  
  20.  {  
  21.   //不存在則將當(dāng)前節(jié)點(diǎn)作為根  
  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.   //若存在,則獲取父結(jié)點(diǎn)  
  35.   CatalogInfo to = (CatalogInfo)hashedTreeObject[subto.ParentId];  
  36.   //判斷父結(jié)點(diǎn)是否已經(jīng)被保存到樹節(jié)點(diǎn)的哈希表中  
  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. //父結(jié)點(diǎn)不存在于哈希表中,創(chuàng)建父結(jié)點(diǎn)并存放到葉子哈希表中  
  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#遞歸樹實(shí)現(xiàn)實(shí)例的基本內(nèi)容就向你介紹到這里,希望對你了解和學(xué)習(xí)C#遞歸樹的實(shí)現(xiàn)有所幫助。

【編輯推薦】

  1. C#遞歸算法理解的實(shí)例分析
  2. C#遞歸思路的使用實(shí)例詳解
  3. C#遞歸函數(shù)應(yīng)用實(shí)例解析
  4. DropDownList顯示的C#遞歸實(shí)現(xiàn)淺析
  5. C#treeview遞歸操作數(shù)據(jù)庫淺析
責(zé)任編輯:仲衡 來源: 博客園
相關(guān)推薦

2009-08-13 14:36:40

C#結(jié)構(gòu)體構(gòu)造函數(shù)

2009-08-12 16:38:35

C#讀取XML節(jié)點(diǎn)

2009-08-13 15:48:57

C#指針

2009-08-13 10:27:28

C#讀取Excel數(shù)據(jù)

2009-09-01 16:59:25

C#畫直線

2009-09-03 17:10:57

2009-08-27 18:09:49

C#接口的實(shí)現(xiàn)

2009-09-01 13:59:01

C#操作Excel

2009-08-17 14:41:47

C#進(jìn)度條實(shí)現(xiàn)

2009-09-09 12:55:59

C# TextBox事

2009-08-20 09:58:06

C#操作文本文件

2009-08-12 10:07:51

C#運(yùn)算符

2009-09-03 17:23:45

C#發(fā)送郵件

2009-09-03 17:06:17

C#回車切換焦點(diǎn)

2009-09-02 16:14:21

C#動態(tài)創(chuàng)建數(shù)組

2009-09-03 14:20:21

C#日期格式化

2009-08-17 17:15:48

C# 進(jìn)度條效果

2009-08-14 09:50:46

C#復(fù)制構(gòu)造函數(shù)

2009-09-02 19:12:37

C#遞歸

2009-09-03 09:16:35

C#遞歸函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號