返回顶部
首页 > 资讯 > 精选 >C#中怎么实现一个递归树
  • 177
分享到

C#中怎么实现一个递归树

2023-06-17 22:06:32 177人浏览 泡泡鱼
摘要

这期内容当中小编将会给大家带来有关C#中怎么实现一个递归树,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C#递归树实现实例:从父结点加字节点,注释的是把字节点向父结点上加//将数据填充到dataTable

这期内容当中小编将会给大家带来有关C#中怎么实现一个递归树,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

C#递归树实现实例:从父结点加字节点,注释的是把字节点向父结点上加

//将数据填充到dataTable  DataTable mytable = new DataTable();  //构建表结构  DataRow myRow;  DataColumn Id = new DataColumn("Id", typeof(System.Int32));  mytable.Columns.Add(Id);  DataColumn Name = new DataColumn("Name", typeof(System.String));  mytable.Columns.Add(Name);  DataColumn ParentId = new DataColumn("ParentId", typeof(System.Int32));  mytable.Columns.Add(ParentId);  DataColumn SiteInfo = new DataColumn("SiteInfo", typeof(SiteInfo));  mytable.Columns.Add(SiteInfo);  //填充数据  //注意i是从1开始的,因为数据库收条没有意义,  //数据库首条记录id为0,会引起死循环  for (int i = 1; i <= cata.Length - 1; i++)  {   myRow = mytable.NewRow();   myRow["Id"] = cata[i].Id;   myRow["Name"] = cata[i].Name;   myRow["ParentId"] = cata[i].ParentId;   myRow["SiteInfo"] = cata[i].SiteInfo;    mytable.Rows.Add(myRow);  }    this.InitTree(newnode.ChildNodes, 0, mytable);       //Hashtable ht = new Hashtable();   //for (int i = 1; i < cata.Length; i++)  //{  // ht.Add(cata[i].Id, cata[i]);  //}    //Hashtable allTreeNodes = new Hashtable();  //Hashtable parentNodes = new Hashtable();  ////遍历树节点描述并拟向生成树结构  //foreach (DictionaryEntry dict in ht)  //{  // CatalogInfo treeobj = (CatalogInfo)dict.Value;  // if (allTreeNodes.Contains(treeobj.Id))  //  continue;  // TreeNode tn = new TreeNode();  // tn.Text = treeobj.Name;  // tn.Value = treeobj.Id.ToString();  // tn.NavigateUrl = "main_right.aspx?catalogid=" + tn.Value;  // tn.Target = "WorkArea";  // generateParentTreeFromNode(  tn, (CatalogInfo)treeobj, ht, parentNodes, allTreeNodes);  //}   ////将所有根节点放到treeview上  //foreach (DictionaryEntry dict in parentNodes)  //{  // newNode.ChildNodes.Add((TreeNode)dict.Value);  //}    }  }   private void InitTree(TreeNodeCollection Nds,   int parentID, DataTable dt)//递归初始化树   {    TreeNode tmpNd;    //递归寻找子节点    DataRow[] rows = dt.Select("ParentID=" + parentID);    foreach (DataRow row in rows)    {  tmpNd = new TreeNode();  tmpNd.Value = row["Id"].ToString();  tmpNd.Text = row["Name"].ToString();  tmpNd.NavigateUrl = "main_right.aspx?catalogid=" + row["Id"].ToString() + "&catalogName=  " +Server.UrlEncode(row["Name"].ToString());  tmpNd.Target = "WorkArea";  Nds.Add(tmpNd);   InitTree(tmpNd.ChildNodes, Convert.ToInt32(tmpNd.Value), dt);    }   }

C#递归树实现实例:从子节点出发考虑

/// <summary>  /// 反向树生成算法  /// </summary>  /// <param name="subtr">子节点</param>  /// <param name="subto">子节点描述对象</param>  /// <param name="hashedTreeObject">被保存到哈希表中的子节点描述</param>  /// <param name="hashedParents">被保存到哈希表中的父节点描述</param>  /// <param name="allTreeNodes">被保存到哈希表中的所有节点描述</param>  private void generateParentTreeFromNode(  TreeNode subtr, CatalogInfo subto, Hashtable hashedTreeObject,   Hashtable hashedParents, Hashtable allTreeNodes)  {    TreeNode trParent;   if (null == hashedTreeObject)    return;   //确定父结点是否存在   if (!hashedTreeObject.Contains(  subto.ParentId) || subto.ParentId == subto.Id )   {    //不存在则将当前节点作为根    if (hashedParents == null)  hashedParents = new Hashtable();    if (!hashedParents.Contains(subto.ParentId))    {  hashedParents.Add(subto.Id, subtr);  if (!allTreeNodes.Contains(subto.Id))   allTreeNodes.Add(subto.Id, subtr);  trParent = subtr;    }   }   else  {    //若存在,则获取父结点    CatalogInfo to = (CatalogInfo)hashedTreeObject[subto.ParentId];    //判断父结点是否已经被保存到树节点的哈希表中    if (allTreeNodes.Contains(subto.ParentId))    {  //if (allTreeNodes.Contains(subto.Id))  // return;  trParent = (TreeNode)allTreeNodes[subto.ParentId];  trParent.ChildNodes.Add(subtr);    }    else   {  //父结点不存在于哈希表中,创建父结点并存放到叶子哈希表中  trParent = new TreeNode();  trParent.Text = to.Name;  trParent.Value = to.Id.ToString();  allTreeNodes.Add(subto.ParentId, trParent);  trParent.ChildNodes.Add(subtr);  //递归向上查找  generateParentTreeFromNode(trParent, to,   hashedTreeObject, hashedParents, allTreeNodes);  if (!allTreeNodes.Contains(subto.Id))   allTreeNodes.Add(subto.Id, subtr);    }    }  }

上述就是小编为大家分享的C#中怎么实现一个递归树了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: C#中怎么实现一个递归树

本文链接: https://lsjlt.com/news/293904.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C#中怎么实现一个递归树
    这期内容当中小编将会给大家带来有关C#中怎么实现一个递归树,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C#递归树实现实例:从父结点加字节点,注释的是把字节点向父结点上加//将数据填充到dataTable...
    99+
    2023-06-17
  • c# 中怎么实现一个阶乘递归算法
    c# 中怎么实现一个阶乘递归算法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。using System;using System.Collections...
    99+
    2023-06-03
  • Javascript中怎么递归实现结构树
    Javascript中怎么递归实现结构树,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1. 数组求和对于已知数组arr,求arr各项之和。...
    99+
    2024-04-02
  • C++二叉树的前序中序后序非递归怎么实现
    这篇“C++二叉树的前序中序后序非递归怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++二叉树的前序中序后序非递归...
    99+
    2023-07-05
  • sqlserver中怎么实现树形结构递归查询
    本篇文章为大家展示了sqlserver中怎么实现树形结构递归查询,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。公用表表达式(CTE),是一个在查询中定义的临时命名结...
    99+
    2024-04-02
  • Angular中directive递归怎么实现目录树结构
    这篇文章主要介绍了Angular中directive递归怎么实现目录树结构,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。效果图:重点:1. ...
    99+
    2024-04-02
  • Vue.js中怎么利用递归组件实现一个可折叠的树形菜单
    本篇文章给大家分享的是有关Vue.js中怎么利用递归组件实现一个可折叠的树形菜单,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在Vue.js中...
    99+
    2024-04-02
  • c语言递归和非递归排序怎么实现
    本篇内容主要讲解“c语言递归和非递归排序怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“c语言递归和非递归排序怎么实现”吧!递归代码流程归并就是把两个或多个序列合并,这里只介绍二路归并,就...
    99+
    2023-06-30
  • vue如何使用递归组件实现一个树形控件
    这篇文章主要介绍“vue如何使用递归组件实现一个树形控件”,在日常操作中,相信很多人在vue如何使用递归组件实现一个树形控件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue如何使用递归组件实现一个树形控件...
    99+
    2023-07-04
  • vue递归实现树形组件
    本文实例为大家分享了vue递归实现树形组件的具体代码,供大家参考,具体内容如下 1. 先来看一下效果: 2. 代码部分 (myTree.vue) 图片可以自己引一下自己的图片,或者...
    99+
    2024-04-02
  • 怎么使用vue递归实现树形组件
    这篇文章主要介绍“怎么使用vue递归实现树形组件”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用vue递归实现树形组件”文章能帮助大家解决问题。1. 先来看一下效果:2. 代码部分 (myTr...
    99+
    2023-07-02
  • VUE递归树形怎么实现多级列表
    今天小编给大家分享一下VUE递归树形怎么实现多级列表的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是递归简单来说就是在组...
    99+
    2023-07-02
  • C++非递归实现二叉树的前中后序遍历
    目录二叉树的前序遍历二叉树的中序遍历二叉树的后序遍历二叉树的前序遍历 在不使用递归的方式遍历二叉树时,我们可以使用一个栈模拟递归的机制。二叉树的前序遍历顺序是:根 → 左子树 → ...
    99+
    2024-04-02
  • js中怎么递归遍历dom树
    这篇文章主要介绍了js中怎么递归遍历dom树,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。JavaScript有什么特点1、js属于一种解释性脚本语言;2、在绝大多数浏览器的...
    99+
    2023-06-14
  • vue中怎么实现左侧菜单和树形图递归
    本文小编为大家详细介绍“vue中怎么实现左侧菜单和树形图递归”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue中怎么实现左侧菜单和树形图递归”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。效果图如下所示:先说说...
    99+
    2023-06-20
  • Java递归如何实现菜单树
    这篇文章将为大家详细讲解有关Java递归如何实现菜单树,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。pom文件<xml version="1.0" encod...
    99+
    2023-06-29
  • C语言中如何利用递归实现线索二叉树
    这篇“C语言中如何利用递归实现线索二叉树”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言中如何利用递归实现线索二叉树”文...
    99+
    2023-06-17
  • java递归查找树的子节点怎么实现
    在Java中,使用递归实现查找树的子节点可以通过以下步骤完成: 定义树节点类,包含节点值和左右子节点引用。 class Tree...
    99+
    2023-10-25
    java
  • Python怎么用递归实现求二叉树深度
    本篇内容介绍了“Python怎么用递归实现求二叉树深度”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!其实就是求二叉树层级,比如一个单点就是一...
    99+
    2023-06-02
  • vue怎么实现左侧菜单树形图递归
    这篇文章主要讲解了“vue怎么实现左侧菜单树形图递归”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue怎么实现左侧菜单树形图递归”吧!先说说遇到的坑,由于是子父组件,当时传递使用的是子父组...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作