【数据结构和算法】--N叉树返回根节点到目标节点的路径
目录
- 一、前言
- 二、Java代码实现
一、前言
项目中接触一个问题:在大量有父子关系的列表中,需要筛选出特定约束的数据【要求某个目标节点延续到根节点的数据】。这个问题抽象为数据结构,就是:N叉树返回根节点到目标节点的路径
二、Java代码实现
public void createTreeInfo(){//查询所有的 有树形结构的列表数据List<NodeTreeDo> originList = new ArrayList<>();//构建出每层level的父子关系Map<String, List<NodeTreeDo>> children = originList.stream().collect(Collectors.groupingBy(node -> node.getParentId()));originList.forEach(node -> node.setChildren(children.get(node.getId())));//过滤得到从根节点""出发的所有N叉树链路// List<NodeTreeDo> collect = originList.stream().filter(k->"".equals(k.getParentId())).collect(Collectors.toList());List<NodeTreeDo> collect = originList.stream().filter(k->"".equals(k.getId())).collect(Collectors.toList()); //从根节点level=0层得到所有链路数据}public List<String> getPathFromRoot(NodeTreeDo root,String targetId){
// NodeTreeDo root = new NodeTreeDo();
// root.setParentId("");
// root.setId("00001");
// root.setChildren(new ArrayList<>()); //具体的tree结构,这里做模拟样例/*** root是完整的树形结构*/LinkedList<String> path = new LinkedList<>(); //找到从根节点到指定接定节点的路径getPathFromRoot(root,targetId,path);return path;}private boolean getPathFromRoot(NodeTreeDo root,String targetId, LinkedList<String> path){if(null == root) return false;String classid = root.getId();path.add(classid);if(classid.equals(targetId)) return true;boolean flag = false;List<NodeTreeDo> children = root.getChildren();if (null != children && !children.isEmpty()) {for (int i = 0; i < children.size(); i++) {if (!flag) {flag = getPathFromRoot(root.getChildren().get(i), targetId, path);}}}if (!flag) {path.remove(path.size() - 1);//孩子中都找不到,弹出栈顶元素}return flag;}
相关文章:
【数据结构和算法】--N叉树返回根节点到目标节点的路径
目录 一、前言二、Java代码实现 一、前言 项目中接触一个问题:在大量有父子关系的列表中,需要筛选出特定约束的数据【要求某个目标节点延续到根节点的数据】。这个问题抽象为数据结构,就是:N叉树返回根节点到目标节点的路径 二、…...

Flutter环境搭建踩坑集锦
Flutter 背景准备工作先检查一下自己的电脑,看一下是不是满足配置要求下载安装配置环境下载安装JDK下载安装Android studio下载Flutterflutter doctor故障Android license status unknownNetwork resources 故障 后记 背景 发现一个不错的框架Flutter,听…...

WPF上位机7——MySql
MySql DML语句 db操作、表操作 字段的数据类型 修改表 表的数据操作 DQL语句 数据查询和去重查询 条件查询 模糊查询 聚合查询 分组查询 排序查询 分页查询 DCL语句 函数 字符串处理函数 数值函数 日期函数 流程函数 约束 外键约束 多表查询 内连接 外连接 自连接 子查询 列…...

Linux的基本指令(2)
指令1:man 作用:可以查询linux指令语法内容。 格式: man 指令 安装man指令: yum install -y man-pages 例如: 查询 指令 ls 的语法内容。 man ls 查询 fork 指令的语法内容。 man fork 在man中存在9个手册&…...
mySql-Linux-安装
mySql-Linux-通过YUM安装 下载 yum 源 [rootspark ~]# wget http://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm --2023-07-31 22:51:21-- http://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm 正在解析主机 repo.mysql.com (repo.mysql.com…...
JS实现IOS标准时间(JSON时间格式)格式转yyyy-mm-dd格式
JS实现IOS时间格式转yyyy-mm-dd格式 /*** IOS时间格式转yyyy-mm-dd格式*param iosDate [IOS时间格式]*return {string} [yyyy-mm-dd]**/ const convertIOSDateFormat (iosDate) > {if(!iosDate) {return -;}const date new Date(iosDate);const year date.getFullYear()…...

【Jmeter】 Report Dashboard 生成html图形测试报告
目录 背景 生成图形报告的方式 1、直接使用一个已存在的 CSV文件生成 2、负载测试完成后自动生成 使用示例 报告内容详情 测试报告摘要图 响应时间随时间变化曲线 活跃线程随时间变化曲线 I/O(Bytes)随时间变化曲线(忽略事务控制器示例结果) …...

7种有效安全的网页抓取方法,如何避免被禁止?
网页抓取是一种从互联网上抓取网页内容的过程,但在网络抓取种相信您也经常遇到障碍?尤其是做跨境业务的,在抓取国外的网站时更有难度。但我们站在您的立场上,提供七种有效的方法来进行网页抓取而不被阻止,最大限度地降…...

flask服务生成证书文件,采用https访问,开启用户密码验证
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 3072开启用户密码验证 auth.verify_password def verify_password(username, password):if username abcdefg and password 1234546:return usernameapp.route(/post_request, methods[POST…...
上海首个“零工”就业云平台上线
1.背景 今年6月,黄浦区人社局在建立新业态新职业岗位信息发布机制,挖掘数字经济、电商微商、兼职、共享、远程等新业态岗位的基础上,和人力资源机构携手打造全市首个“新经济、新业态”零工就业云平台。 2. 平台简介 平台上汇聚了新生代互…...

面试必考精华版Leetcode104. 二叉树的最大深度
题目: 代码(首刷自解 day23): class Solution { public:int maxDepth(TreeNode* root) {if(rootnullptr) return 0;return max(maxDepth(root->left),maxDepth(root->right))1;} };...
winform panel中放置 usercontrol ,设置usercontrol随着dpi分辨率变化
在 WinForms 中,如果要使 UserControl 随着 DPI 分辨率的变化而自适应调整大小,可以遵循以下步骤: 使用 Anchor 和 Dock 属性:在 UserControl 中的控件布局时,使用 Anchor 和 Dock 属性来适应父控件的大小变化。 处理…...

更新页面无法回显
需求与问题: 在菜品管理开发中,我需要修改菜品,第一步是回显页面,但在我再三确认代码无误的情况下依旧无法回显内容 问题发现与解决: 经过排查,我发现我的DishDTO内容如下: Data public clas…...

CS 144 Lab Four -- the TCP connection
CS 144 Lab Four -- the TCP connection TCPConnection 简述TCP 状态图代码实现完整流程追踪 测试 对应课程视频: 【计算机网络】 斯坦福大学CS144课程 Lab Three 对应的PDF: Lab Checkpoint 4: down the stack (the network interface) TCPConnection 简述 TCPConnection 需…...

在Volo.Abp微服务中使用SignalR
假设需要通过SignalR发送消息通知,并在前端接收消息通知的功能 创建SignalR服务 在项目中引用 abp add-package Volo.Abp.AspNetCore.SignalR在Module文件中添加对模块依赖 [DependsOn(...typeof(AbpAspNetCoreSignalRModule))] public class IdentityApplicati…...

数据可视化(七)常用图表的绘制
1. #seaborn绘制常用图表 #折线图 #replot(x,y,kind,data) #lineplot(x,y,data) #直方图 #displot(data,rug) #条形图 #barplot&…...
【ARM 常见汇编指令学习 8 - dsb sy 指令及 dsb 参数介绍】
文章目录 ARM dsb sy 指令 上篇文章:ARM 常见汇编指令学习 7 - LDR 指令与LDR伪指令及 mov指令 下篇文章:ARM 常见汇编指令学习 9 - 缓存管理指令 DC 与 IC ARM dsb sy 指令 数据同步屏障是一种特殊类型的内存屏障。 只有当DSB指令执行完毕后ÿ…...

YOLOv5本地模型训练报错解决
报错解决 页面文件太小,无法完成操作 训练过程中,发生下图所示的报错,同时pycharm崩溃 1. 更改虚拟内存 进入高级系统设置,应该都会进,就不说过程了 设置虚拟内存大小 2. 减小占用内容大小 新建一个fixNvPe.py程序…...
tomcat p12证书另存为nginx .crt证书和.key私钥
tomcat p12证书另存为nginx .crt证书和.key私钥 Tomcat使用的.pfx或.keystore文件都是私钥及公钥证书一起的,通过pin保证安全;nginx只需要使用.pem或.crt公钥证书文件和.key私钥即可,如果原ssl证书不方便重新下载,在已有tomcat证…...
Docker的userland-proxy
前言 Docker针对端口映射前后有两种方案,一种是1.7版本之前docker-proxyiptables DNAT 的方式;另一种则是1.7版本(及之后)提供的完全由iptables DNAT实现的端口映射。不过在目前docker 1.9.1中,前一种方式依旧是默认方式。但是从Docker 1.7版…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...