递归的层序遍历

最近遇到一个业务需求:一颗依赖树,其实就是一颗递归树,如何一层一层的数据放在一起,可以近似理解为二叉树的层序遍历。

业务理解为递归树的层序遍历
在这里插入图片描述

代码示例:

public class RecursionErgodic {public static void main(String[] args) {User user = buildUser();System.out.println(user);Map<Integer, List<String>> map = new HashMap<>();int index = 1;List<User> childRen = user.getChildRen();List<String> list = new ArrayList<>();list.add(user.getName());map.put(index, list);cfsTraversal(childRen, map, index + 1);System.out.println(map);}private static void cfsTraversal(List<User> childRen, Map<Integer, List<String>> map, int index) {if (childRen == null) {return;}int size = childRen.size();for (int i = 0; i < size; i++) {User user = childRen.get(i);List<String> list = map.get(index);if (list == null) {list = new ArrayList<>();}list.add(user.getName());map.put(index, list);//特别注意:递归 这里不要改变index本身的值cfsTraversal(user.getChildRen(), map, index + 1);}}public static User buildUser() {User user = new User();user.setId(1);user.setName("座山雕");User user1 = new User();user1.setId(2);user1.setName("刘大脑袋");User user2 = new User();user2.setId(3);user2.setName("殷八字");User user3 = new User();user3.setId(4);user3.setName("刘大脑袋徒弟1");User user4 = new User();user4.setId(5);user4.setName("刘大脑袋徒弟2");User user5 = new User();user5.setId(6);user5.setName("殷八字徒弟2");List<User> list2 = new ArrayList<>();list2.add(user4);list2.add(user3);user1.setChildRen(list2);List<User> list3 = new ArrayList<>();list3.add(user5);user2.setChildRen(list3);List<User> list1 = new ArrayList<>();list1.add(user1);list1.add(user2);user.setChildRen(list1);return user;}static class User {private int id;private String name;private List<User> childRen;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public List<User> getChildRen() {return childRen;}public void setChildRen(List<User> childRen) {this.childRen = childRen;}}
}

结果:
输入(一个对象):

{"childRen":[{"childRen":[{"id":5,"name":"刘大脑袋徒弟2"},{"id":4,"name":"刘大脑袋徒弟1"}],"id":2,"name":"刘大脑袋"},{"childRen":[{"id":6,"name":"殷八字徒弟2"}],"id":3,"name":"殷八字"}],"id":1,"name":"座山雕"}

输出(一个map)

{1=[座山雕], 2=[刘大脑袋, 殷八字], 3=[刘大脑袋徒弟2, 刘大脑袋徒弟1, 殷八字徒弟2]}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/651323.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Kimi的一些体会

1、https://kimi.cn 这个回答问题还比较专业&#xff0c;感觉比以前chatgpt要好一些 2、Moonshot AI - 开放平台 可以通过注册账号&#xff0c;或微信扫描就可以登录进去 通过postman可以体会一下功能 2.1 POST https://api.moonshot.cn/v1/chat/completions 2.2 授权选择下…

达梦(DM) SQL日期操作及分析函数

达梦DM SQL日期操作及分析函数 日期操作SYSDATEEXTRACT判断一年是否为闰年周的计算确定某月内第一个和最后一个周末某天的日期确定指定年份季度的开始日期和结束日期补充范围内丢失的值按照给定的时间单位查找使用日期的特殊部分比较记录 范围处理分析函数定位连续值的范围查找…

docker部署通义千问-7B-Chat的openai-api环境

服务器环境&#xff1a; 显卡驱动&#xff1a;Driver Version: 530.30.02 CUDA版本&#xff1a;CUDA Version: 12.1 显卡&#xff1a;NVIDIA GeForce RTX 3090共4张 注意&#xff1a;最好把显卡驱动升级到530&#xff0c;CUDA版本之前使用11.7有问题。 一、下载模型文件 …

环境配置——Windows平台配置VScode运行环境为远程服务器或虚拟机

1. 远程机需要先安装SSH服务&#xff0c;命令如下 sudo apt install openssh-server 2. 安装好后需要开启SSH服务&#xff1a; sudo service sshd start 3. 查看SSH服务是否有被开启&#xff1a; sudo systemctl status sshd.service 4. 本地Windows需要生成密钥将公钥放…

茴香豆:搭建你的RAG智能助理-笔记三

本次课程由书生浦语社区贡献者【北辰】老师讲解【茴香豆&#xff1a;搭建你的 RAG 智能助理】课程 课程视频&#xff1a;https://www.bilibili.com/video/BV1QA4m1F7t4/ 课程文档&#xff1a;Tutorial/huixiangdou/readme.md at camp2 InternLM/Tutorial GitHub 该课程&…

贪吃蛇撞墙功能的实现 和自动行走刷新地图 -- 第三十天

1.撞墙 1.1最初的头和尾指针要置为空&#xff0c;不然是野指针 1.2 在增加和删除节点后&#xff0c;判断是否撞墙&#xff0c;撞墙则初始话蛇 1.3在撞墙后初始化蛇&#xff0c;如果头不为空就撞墙&#xff0c;得定义临时指针指向头&#xff0c;释放头节点 2.自动刷新地图 2.1…

解决问题:TypeError:unsupported operand type(s) for -: ‘float‘ and ‘decimal.Decimal‘

文章目录 一、现象二、解决方案 一、现象 用Pandas 处理数据的时候&#xff0c;想得到增长率&#xff0c;没想到翻车了&#xff1f; import pandas as pddf pd.read_csv(data.csv)df[增长率] ((df[今年] - df[去年]) / (df[今年]))执行一下语句发现报错 TypeError&#xf…

探秘MySQL主从复制的多种实现方式

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 探秘MySQL主从复制的多种实现方式 前言基于语句的复制原理实现方法应用场景及优缺点应用场景优点缺点 基于行的复制原理实现方法优势和适用性优势适用性 基于混合模式的复制混合模式复制的工作原理混合…

【WEB前端2024】开源元宇宙:乔布斯3D纪念馆-第12课-摆件跳转网页

【WEB前端2024】开源元宇宙&#xff1a;乔布斯3D纪念馆-第12课-摆件跳转网页 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎&…

【每日刷题】Day25

【每日刷题】Day25 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 238. 除自身以外数组的乘积 - 力扣&#xff08;LeetCode&#xff09; 2. 82. 删除排序链表中的重复…

手写文字和数字的自动识别

文章目录 题目要求实现方法1&#xff1a;pytesseractpython的OCR工具pytesseractpytesseract介绍OCR介绍pytesseract的安装以及环境配置 页面展示代码实现优缺点分析 实现方法2&#xff1a;PaddleOCRPaddleOCR介绍页面展示实现代码优缺点分析 实现方法3&#xff1a;EasyOCREasy…

工作记录:vue-grid-layout 修改 margin 导致 item 高度剧烈变化

问题 用 vue-gird-layout 时发现&#xff0c;当改变 margin 值时&#xff0c;item 的尺寸也会跟着变化。 如下图&#xff1a;row height 和每个 item 的 h 都保持不变。修改 margin-y&#xff0c;item 的实际高度也跟着变了&#xff1a; 原因 研究了一番&#xff0c;发现原…