树状解析之深度优先算法(一)
导读:最近有一个解析树的业务,之前参加过蓝桥杯算法比赛学过一些算法。(还好没有全部忘记哈哈)怕以后忘记这种思路特写此博文。
一、深度优先,记得广告中经常听到过,抱着试试看的态度买了3个疗程,效果不错........ 也经常听人说过什么车到山前必有路,船到桥头自然直。哈哈,这种思想就是回溯思想,也可称为试探思想。
二、业务需求
1.这里我就举一个其他的使用场景,我们要获取一遍文章的评论信息,评论是联级模式。我们现在要把数据解析成有数据结构的树方便前端解析。
2.
CommentId | 评论表主键 |
ParentCommentId | 二级评论主键 盖楼式 |
TopCommentId | 最上级评论的主键 |
ArticleId | 文章主键 |
三、数据解析
1.现在我们通过文章查询到了所有评论但是没有任何结构返回到前端去,小丽师姐还不弄死我呀,但是现在我们知道我们所有的数据有主从关系,只需要我们按照关系拼接好返回就可以了
2.查询数据我就不演示了,直接进行数据组装,我们现在知道每条数据都有一个父级ID,如果父级ID是空就代表他是顶级评论,就看它有没有子级评论信息。逻辑比较简单但是大家可以自行发散思维。
四、有请代码神君
1.这里主要是用了深度优先搜索代码可以看出现非常简介,一直找自己有没有子级评论信息。
/// <summary> /// 组合评论信息 /// </summary> /// <param name="comments">评论池</param> /// <param name="thisCommentModel">当前要找下级的评论</param> void CombinationComment(List<CommentModel> comments, CommentModel thisCommentModel) { //深度搜索返回 comments.ForEach(x => { if (x.Parentcommentid == thisCommentModel.Commentid) { //commentModels这是代表子级评论List<CommentModel>类型 thisCommentModel.commentModels.Add(x); comments.Remove(x); CombinationComment(comments, x); } }); }
2.第二种方法,通过多创建几个空间进行数据解析
/// <summary> /// 返回树形结构评论 /// </summary> /// <param name="comments">评论池</param> /// <returns></returns> List<CommentModel> CombinationComment(List<CommentModel> comments) { //返回树 List<CommentModel> result = new List<CommentModel>(); //处理字典 Dictionary<int, CommentModel> pairs = new Dictionary<int, CommentModel>(); //存放字典 comments.ForEach(x => { pairs.Add(x.Commentid, x); }); //解析树 comments.ForEach(x => { //判断是不是存在父级 if (pairs.ContainsKey(x.Parentcommentid.Value)) { pairs[x.Parentcommentid.Value].commentModels.Add(x); } }); return result; }
作者:匿名
出处:https://www.cnblogs.com/chenxi001/p/12221811.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架