通过根结点到叶结点的路径还原多叉树

探索Vortex开源GPGPU:RISC-V SIMT架构(4-1),Execute SFU(1) 本文详细分析了Vortex RISC-V内核6级流水线中Execute阶段的SFU(特殊功能单元)模块。重点介绍了SFU的数据流结构,包含dispatch_unit、pe_switch、csr_unit、wctl_unit和gather_unit五个子模块。文章深入解析了warp控制指令wspawn和tmc的实现机制:wspawn用于激活指定数量的warp并设置新PC值,tmc则用于控制线程掩码和warp状态。通过C代码和汇编指令的对照分析,阐明了这些指令在并行计算中的关键作用,包括线程激活、状态切换和执行 阅读详情

工作的时候遇到根据根结点到叶结点的路径还原多叉树的问题,下面是我的源代码,不知道你们有没有好的方法,欢迎评论指正。

由以下三个路径:

路径深度可以自定义,本文路径深度为4

还原成如下多叉树,


import com.alibaba.fastjson.JSON;
import lombok.Getter;
import lombok.Setter;

import java.util.*;

/**
 * @Author: RichurLiu
 * @Date: 2019/7/19
 */
public class ListMain {

    public static void main(String[] args) {
        Node root = new Node(0L,"", (short) 0, new ArrayList<>());

        PositionListVO pl1 = new PositionListVO(11L,21L,31L,41L);
        PositionListVO pl2 = new PositionListVO(12L,21L,32L,42L);
        PositionListVO pl3 = new PositionListVO(11L,22L,33L,43L);

        PositionListBaseVO plb01 = new PositionListBaseVO(11L,(short)1,"11L");
        PositionListBaseVO plb02 = new PositionListBaseVO(12L,(short)1,"12L");
        PositionListBaseVO plb03 = new PositionListBaseVO(21L,(short)2,"21L");
        PositionListBaseVO plb04 = new PositionListBaseVO(22L,(short)2,"22L");
        PositionListBaseVO plb05 = new PositionListBaseVO(31L,(short)3,"31L");
        PositionListBaseVO plb06 = new PositionListBaseVO(32L,(short)3,"32L");
        PositionListBaseVO plb07 = new PositionListBaseVO(33L,(short)3,"33L");
        PositionListBaseVO plb08 = new PositionListBaseVO(41L,(short)4,"41L");
        PositionListBaseVO plb09 = new PositionListBaseVO(42L,(short)4,"42L");
        PositionListBaseVO plb10 = new PositionListBaseVO(43L,(short)4,"43L");

        //1将所有路径加载到list中
        List<PositionListVO> positionList = new ArrayList<>();
        positionList.add(pl1);
        positionList.add(pl2);
        positionList.add(pl3);
        //2将所有基础数据加载到map中
        map.put(plb01.getId(),plb01);
        map.put(plb02.getId(),plb02);
        map.put(plb03.getId(),plb03);
        map.put(plb04.getId(),plb04);
        map.put(plb05.getId(),plb05);
        map.put(plb06.getId(),plb06);
        map.put(plb07.getId(),plb07);
        map.put(plb08.getId(),plb08);
        map.put(plb09.getId(),plb09);
        map.put(plb10.getId(),plb10);
        //List<PositionListBaseVO> positionListBase = new ArrayList<>();
        for (PositionListVO listVO : positionList) {
            Node parent = root;
            parent = insertNode(initNode(listVO.getListId()), parent.getSonList());
            if(null == parent.getSonList()){
                parent.setSonList(new ArrayList<>());
            }
            parent = insertNode(initNode(listVO.getChildListId()), parent.getSonList());
            if(null == parent.getSonList()){
                parent.setSonList(new ArrayList<>());
            }
            parent = insertNode(initNode(listVO.getFunctionId()), parent.getSonList());
            if(null == parent.getSonList()){
                parent.setSonList(new ArrayList<>());
            }
            insertNode(initNode(listVO.getStandardId()), parent.getSonList());

        }
        List<Node> sonList = root.getSonList();
        System.out.println(JSON.toJSONString(sonList));
    }

    static Map<Long,PositionListBaseVO> map = new HashMap<>();


    /**
     * 初始化结点信息
     * @param id
     * @return
     */
    private static Node initNode(long id){
        Node n = new Node();
        PositionListBaseVO vo = map.get(id);
        if(null == vo){
            //抛异常
            return n;
        }
        n.setId(vo.getId());
        n.setType(vo.getType());
        n.setName(vo.getName());
        return n;
    }

    /**
     * 如果树中无此结点,向树中插入一个结点
     * @param node
     * @param sonList
     * @return
     */
    private static Node insertNode(Node node, List<Node> sonList){
        boolean flag = false;
        for (Node n : sonList) {
            if(n.getId().equals(node.getId())){
                flag = true;
                node = n;
                break;
            }
        }
        //树中不存在则添加
        if(!flag){
            sonList.add(node);
        }
        return node;
    }
}

结点:

@Getter
@Setter
class Node {
    private Long id;          //结点id
    private String name;        //结点名称
    private Short type;
    private List<Node> sonList; //该结点的 子结点集合

    Node(){}
    Node(Long id, String name, Short type, List<Node> sonList) {
        this.id = id;
        this.name = name;
        this.type = type;
        this.sonList = sonList;
    }
}

基础类:

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

/**
 * @Author: RichurLiu
 * @Date: 2019/7/21
 */
@Setter
@Getter
@AllArgsConstructor
public class PositionListBaseVO {
    private Long id;
    private Short type;
    private String name;
    PositionListBaseVO(){}
}
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

/**
 * @Author: RichurLiu
 * @Date: 2019/7/21
 */
@Setter
@Getter
@AllArgsConstructor
public class PositionListVO {
    private Long listId;
    private Long childListId;
    private Long functionId;
    private Long standardId;
    PositionListVO(){}
}

会用到两个jar包:

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.2</version>
            <scope>compile</scope>
        </dependency>

 

Allegro172版本如何在联机模式下使用skill文件操作指导 注意:如果下次重新开启Symphony模式的时候可能导致symphony_skill中的文件内容被清空,所以最好将自己常用的skill文件都写到symphony_skill.txt中去,然后做好备份,需要的时候,在开启软件后把文件放到env目录中去。在用Allegeo172版本进行PCB设计的时候,有时会用到Symphony模式进行多人实时在线协同设计,如下图。这个模式设计起来可以提升设计速度,但是也有一个缺陷,就是不能使用skill文件。如下图,当调用skill的时候就会出现如下报错。 阅读详情

相关推荐

ur3手眼标定+realsenseL515

知乎 csdn

AI_future的博客 978

将多个全路径转换为树路径的算法 - An algorithm that convert multi full path to path tree

I got a problem to convert multiple full path to a path tree, like this: /* source: /a/b/c/d/e /a/b/e/f/g /a/b/h /a/i/j /a/i/k what I need: a / \ b i ...

谦与谦寻的神隐 1260

NX二次开发编译时dll自动数字签名及拷贝

在UG5.0开始,所有基于UG二次开发的DLL都要“签名”后才能被客户端上正版的NX调用。

菜鸟爱飞不飞的博客 2683

Java将List列表转换为Tree树结构的方法

本文介绍如何从数据库中读取List列表数据并将其转换为Tree树结构数据。从而可以完整展现其中的层级关系。

sg_knight的专栏 3039

YOLOv12改进专栏目录 | 本专栏持续更新500+篇内容 | 包含各种卷积、主干网络、各种注意力机制、检测头、损失函数、小目标检测改进、二次创新模块、独家创新等几百种创新点改进

《YOLOv12高效涨点改进专栏》提供500+创新改进方案,涵盖卷积、主干网络、注意力机制等模块优化,适用于检测、分割等任务。改进点来自顶会论文和个人经验,支持多种模型版本和任务场景。专栏包含详细教程、数据集增强、性能评估工具等,帮助科研人员快速实现模型优化和论文发表。提供完整运行项目和环境配置指导,适合计算机及相关专业研究人员使用,持续更新保障长期科研需求。

Ai缝合怪、助力小伙伴高效发论文 2301

[系统安全] 十六.PE文件逆向基础知识(PE解析和PE编辑工具)

您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。换专业确实挺难的,逆向分析也是块硬骨头,但我也试试,看看自己未来四年究竟能将它学到什么程度,漫漫长征路,偏向虎山行。享受过程,一起加油~ 作者前面介绍了三个漏洞,包括Chrome浏览器保留密码渗透解析、通过Chrome浏

杨秀璋的专栏 1万+

Java 递归 将List转为树的形式

list原始数据 [ {name:"A一级菜单1",fid:"-1",id:"1"}, {name:"AA二级菜单1",fid:"1",id:"2"}, {name:"AAA三级菜单1",fid:"2",id:"3"}, {name:"AB二级菜单2",fid:"1",id:"4"}, {name:"B一级菜单2",fid:"-1",id:"5"}, {name:"BA二级菜单1",fid:"5"...

WXN的博客 1155

基于若依的ruoyi-nbcio-plus支持VForm3表单字段数据保存到数据库的一种方法——全网首创(一)

基于若依的ruoyi-nbcio-plus支持VForm3表单字段数据保存到数据库的一种方法——全网首创(一)

宁波阿成的博客 659

如何将路径字符串数组(string[])转成树结构(treeNode[])?

将路径字符串数组转换成目标树结构,并用el-tree成功渲染。

唐先森的博客 584

2023华为od机试C卷【宽度最小的子矩阵】Python 实现

给定一个矩阵,包含N*M个整数,和一个包含K个整数的数组现在要求在这个矩阵中找一个宽度最小的子矩阵,要求子矩阵包含数组中所有的整数。

MISAYAONE的博客 2186

TripoSR: Fast 3D Object Reconstruction from a Single Image 论文阅读

模型的主要参数,如变换器的层数、三平面的维度、NeRF模型的具体细节和主要训练配置,在表1中详细说明。TripoSR的算法流程结合了先进的数据处理、模型设计和训练技术,使其能够在不到0.5秒的时间内从单张图像中快速生成详细的3D网格。总体而言,TripoSR是一个强大的3D重建工具,它在速度和质量上都表现出色,但也需要考虑到其对计算资源的需求和在处理极端复杂场景时可能遇到的挑战。:通过精心策划的训练数据集和多样化的数据渲染技术,TripoSR提高了模型的泛化能力和对真实世界图像的适应性。

Christo的博客 1946

Java 、Kotlin、JavaScript 把全路径列表转换成树状层级嵌套结构

问题描述 source: /a/b/c/d/e /a/b/e/f/g /a/b/h /a/i/j /a/i/k what I need: a / \ b i /|\ / \ c e h j k | | d f | | e g 程序源代码 JavaScr...

AI天才研究院 9610

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

剑指Offer(牛客网 Java)24——二叉树中和为某一值的路径

剑指offer-二叉树中和为某一值的路径 题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)

citricl 292

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

二叉树中和为某一值的路径

文章目录题目描述错误思路错误代码错误分析正确思路 题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前) public class Solution { public ArrayList&lt;ArrayList&lt;Integer...

Joy 414

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

树和二叉树

树的基本术语: 结点的度(Degree):结点的子树个数; 树的度:树的所有结点中最大的度数; 叶结点(Leaf):度为0的结点; 父结点(Parent):有子树的结点是其子树的根节点的父结点; 子结点/孩子结点(Child):若A结点是B结点的父结点,则称B结点是A结点的子结点; 兄弟结点(Sibling):具有同一个父结点的各结点彼此是兄弟结点; 路径和路径长度:从结点n1到nk的路径为一个...

Oligizzz 618

数据结构:二叉树经典例题(单选题)-->你真的掌握二叉树了吗?(第一弹)

关于二叉树的基本经典单选例题,对二叉树性质的巩固,相信你做完这些例题就可以对二叉树轻松拿捏(第一弹)你也快来试试吧!

Yikefore的博客 2675

二叉树详解

1.这里就不介绍二叉树的相关概念,如,树高度,节点层数,节点度数,路径,叶节点,分支节点,根节点,父节点,左节点,右节点,兄弟节点,祖先节点,子孙节点,左子树,右子树等基本概念 2.二叉树的分类 (1).斜树 斜树:所有的结点都只有左子树的二叉树叫左斜树。所有结点都是只有右子树的二叉树叫右斜树。这两者统称为斜树。 左斜树: 右斜树: (2).满二叉树 国际标准定义是除了叶结点外每一个结点都有左右子结点的二叉树。如下图所示: 注意:这里的定义与国内某些教材的定义不同,国内的定义是:

Allence的博客 1784

(4.2)树与二叉树之二叉树的定义与复原

文章目录1.线性结构与树形结构的区别2.二叉树的基本概念和性质 1.线性结构与树形结构的区别 2.二叉树的基本概念和性质 二叉树的递归定义:二叉树或为空树,或是由一个根结点加上两棵分别称为左子树和右子树的、 互不交的二叉树组成。 二叉树的特点: ⑴ 每个结点最多只有两棵子树,即不存结点度大于2的结点; ⑵ 子树有左右之分,不能颠倒 二叉树的五种基本形态: 基本概念: (1)节点度:节点所...

喜欢打篮球的普通人 350

【数据结构】实验五:树和二叉树

树和二叉树实验分享

Lenhart001的博客 2779

二叉树基本性质和操作

文章目录树—Tree定义树的基本术语树的基本性质二叉树定义二叉树的特点二叉树的性质特殊二叉树斜树定义特点满二叉树定义特点完全二叉树定义特点二叉树操作结构体创建二叉树遍历先序遍历-DLR中序遍历-LDR后序遍历-LRD层序遍历双序遍历树的深度结点个数叶子结点个数叶子结点到根结点的路径左右结点互换树、森林与二叉树的转换树转换为二叉树森林转换为二叉树二叉树还原为树二叉树还原为森林结语 树—Tree 定义 树(Tree)是n(n≥0)个结点的有限集;n=0时称为空树;在任意一棵非空树中: (1) 有且仅有一个特定的

qq_45636631的博客 383

找出二叉树中所有累加值为给定值的路径

在二元树中找出和为某一值的所有路径 题目:输入一个整数和一棵二元树。      从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。      打印出和与输入整数相等的所有路径。      例如 输入整数22和如下二元树        10           / \          5 12         / \        4 7 则打印出两条路径:10

WUDAIJUN的博客 1099

24.二叉树中和为某一值的路径

1.题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。2.思路:DFS,当检测到叶子结点时,判断是否满足条件,若满足则存入res中,若不满足,则继续回溯遍历。要注意初始判断条件以及回溯时状态的还原。3.代码/* struct TreeNode { int val; struct TreeNode ...

Nick 247

剑指offer——|二叉树|Java题解

序号 题目 解题要点 剑6 重建二叉树 二叉树,递归 剑8 树的子结构 代码的鲁棒性 剑19 二叉树的镜像 二叉树,递归 剑23 从上往下打印二叉树 二叉树,递归 剑6 重建二叉树 二叉树,递归 剑6 重建二叉树 二叉树,递归 剑6 重建二叉树 二叉树,递归 剑6 重建二叉树 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序...

qq_23847531的博客 394

牛客网 剑指Offer编程题------二叉树中和为某一值的路径

题目描述: 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前) 题目链接 树节点的类定义: public class TreeNode { int val = 0; TreeNode left = null; ...

八面玲珑 243
上一篇: origin论文画图记录
下一篇: SpringBoot2.x+prometheus+grafana服务监控(一)
RichurLiu
博客等级 码龄14年 4粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值