当前位置: 首页 > news >正文

【数据结构和算法】--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;}
http://www.lryc.cn/news/108465.html

相关文章:

  • Flutter环境搭建踩坑集锦
  • WPF上位机7——MySql
  • Linux的基本指令(2)
  • mySql-Linux-安装
  • JS实现IOS标准时间(JSON时间格式)格式转yyyy-mm-dd格式
  • 【Jmeter】 Report Dashboard 生成html图形测试报告
  • 7种有效安全的网页抓取方法,如何避免被禁止?
  • flask服务生成证书文件,采用https访问,开启用户密码验证
  • 上海首个“零工”就业云平台上线
  • 面试必考精华版Leetcode104. 二叉树的最大深度
  • winform panel中放置 usercontrol ,设置usercontrol随着dpi分辨率变化
  • 更新页面无法回显
  • CS 144 Lab Four -- the TCP connection
  • 在Volo.Abp微服务中使用SignalR
  • 数据可视化(七)常用图表的绘制
  • 【ARM 常见汇编指令学习 8 - dsb sy 指令及 dsb 参数介绍】
  • YOLOv5本地模型训练报错解决
  • tomcat p12证书另存为nginx .crt证书和.key私钥
  • Docker的userland-proxy
  • uniapp封装request请求
  • Go如何构建高效API接口| 青训营
  • 【云原生K8s】二进制部署单master K8s+etcd集群
  • TRUNC(截取)函数的用法
  • IELAB-网络工程师的路由答疑10问(1)
  • OpenLayers入门,OpenLayers加载TopoJson数据,使用行政区划边界作为示例
  • 【图像去噪】基于原始对偶算法优化的TV-L1模型进行图像去噪研究(Matlab代码实现)
  • RISC-V基础之函数调用(五)函数递归调用及函数参数数量溢出(超出现有寄存器个数)约定(包含实例)
  • 力扣:48. 旋转图像(Python3)
  • HarmonyOS应用开发者基础与高级认证题库——中级篇
  • Python中实现多个列表、字典、元组、集合的连接