发布时间:2026/8/22 15:50:45
C# 将数据组合为树形结构(List<Tree>)的通用方法 目录步骤 1: 定义树节点类步骤 2: 构建树方法 1: 使用递归方法 2: 使用迭代广度优先搜索步骤 3: 使用树结构如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。在C#中将数据组合为树形结构通常涉及到创建树形节点类并使用递归或迭代方法来构建树。下面是一个通用的方法通过这种方式可以创建一个树形结构例如一个组织架构或文件系统树。步骤 1: 定义树节点类首先定义一个树节点类该类通常包含数据字段和指向子节点的引用。public class TreeNodeT{public T Data { get; set; }public ListTreeNodeT Children { get; set; }public TreeNode(T data){Data data;Children new ListTreeNodeT();}// 可选添加方法以添加子节点public void AddChild(TreeNodeT child){Children.Add(child);}}步骤 2: 构建树根据具体的数据和结构你可以使用递归或迭代方法来构建树。这里展示两种常见的方法方法 1: 使用递归假设你有一个数据源例如一个列表或数据库查询结果并且每个节点都有一个指向其父节点的ID。你可以使用递归来构建树。public class NodeData{public int Id { get; set; }public int? ParentId { get; set; } // 假设这是父节点的ID如果是根节点则为null或0public string Name { get; set; } // 示例数据字段}public static TreeNodeNodeData BuildTree(ListNodeData nodes){var lookup nodes.ToLookup(n n.ParentId); // 使用Lookup来快速查找子节点return BuildTreeRecursive(nodes, lookup, null); // 从ParentId为null的节点开始构建树}private static TreeNodeNodeData BuildTreeRecursive(ListNodeData nodes, ILookupint?, NodeData lookup, int? parentId){var currentNodes lookup[parentId].ToList(); // 获取当前父节点的所有子节点var treeNode new TreeNodeNodeData(currentNodes.First()); // 创建一个树节点使用当前子节点的第一个数据项作为节点数据如果有多个可以根据需要选择foreach (var node in currentNodes){treeNode.AddChild(BuildTreeRecursive(nodes, lookup, node.Id)); // 递归构建子树}return treeNode;}方法 2: 使用迭代广度优先搜索如果你更喜欢使用迭代方法可以尝试广度优先搜索BFS来实现。这通常涉及到队列的使用。public static TreeNodeNodeData BuildTreeIterative(ListNodeData nodes){var root new TreeNodeNodeData(nodes.First(n n.ParentId null)); // 假设根节点是ParentId为null的节点var queue new QueueTreeNodeNodeData(); // 用于BFS的队列queue.Enqueue(root); // 将根节点加入队列while (queue.Count 0){var current queue.Dequeue(); // 取出当前节点foreach (var childData in nodes.Where(n n.ParentId current.Data.Id)) // 找到所有当前节点的子节点数据项{var childNode new TreeNodeNodeData(childData); // 为每个子节点创建一个树节点实例current.AddChild(childNode); // 将子节点添加到当前节点下queue.Enqueue(childNode); // 将子节点加入队列以供后续处理}}return root; // 返回根节点整个树已构建完成}步骤 3: 使用树结构现在你可以使用构建的树结构进行各种操作如遍历、搜索或显示树形结构等。例如遍历整个树public static void TraverseTree(TreeNodeNodeData node, ActionTreeNodeNodeData action){action(node); // 对当前节点执行操作foreach (var child in node.Children) // 递归遍历所有子节点{TraverseTree(child, action);}}通过这种方式你可以根据具体的数据和需求灵活地构建和使用树形结构如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。

相关新闻

2026/8/22 15:45:44

Extracting Disaster Impacts and Impact Related Locations in Social Media Posts Using Large Langua...

文章主要内容与创新点总结 一、主要内容 该研究聚焦于利用大型语言模型(LLMs)从灾害相关社交媒体帖子中提取灾害影响类型及受影响地点,以解决传统权威数据(如传感器、遥感影像)在灾害响应中存在的地理时间信息缺口问题。 研究背景:自然灾害常造成严重人员伤亡和基础设施…

2026/8/22 17:05:49

无人机三维航迹规划实战:从华为杯建模到Gazebo可执行代码

1. 这不是一道“算数题”,而是一次对真实空域系统的压力测试“华为杯”研究生数学建模竞赛2019年F题——智能飞行器航迹规划模型,这个名字听起来像教科书里的一个章节标题,但实打实地做过的人才知道,它根本不是在考你能不能解出一…

2026/8/22 17:05:49

数学建模实战:基于需求预测与报童模型的蔬菜定价补货决策系统

1. 项目概述与核心挑战看到“蔬菜类商品的自动定价与补货决策”这个题目,很多初次接触数学建模的同学可能会觉得头大,这不就是超市里天天干的事儿吗?但恰恰是这种贴近生活的题目,才最考验建模者将实际问题抽象、量化并求解的综合能…

2026/8/22 17:00:49

从TRAXX机车到BSP 25T:模块化架构与工程复用的工业软件实践

如果你在铁路技术论坛或开发者社区看到“BSP原型车”这个词,可能会有点困惑——这听起来像是一个软件项目或硬件原型。但今天我们要聊的,是一个在铁路工业软件、仿真建模和数字孪生领域极具代表性的经典案例:如何通过一个真实的机车车型&…

2026/8/21 13:13:49

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/21 20:14:07

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/21 15:40:01

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/21 15:40:01

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/22 1:39:53

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…