首页 > 编程语言 >Java 递归查询所有子节点id实现方法

Java 递归查询所有子节点id实现方法

时间:2024-06-06 10:11:17浏览次数:16  
标签:Node nodeList 递归 节点 childIds parentId Java id

首先,我们需要创建一个方法来实现查询所有子节点id的功能。

// 定义一个方法,输入参数为父节点id和节点列表,返回值为该父节点下的所有子节点id
public List<Long> getAllChildIds(Long parentId, List<Node> nodeList) {
    List<Long> childIds = new ArrayList<>();
    getAllChildIds(parentId, nodeList, childIds);
    return childIds;
}

然后,我们编写递归方法来实现查询子节点id的逻辑

// 递归查询子节点id的方法
private void getAllChildIds(Long parentId, List<Node> nodeList, List<Long> childIds) {
    for (Node node : nodeList) {
        if (node.getParentId().equals(parentId)) {
            childIds.add(node.getId());
            getAllChildIds(node.getId(), nodeList, childIds); // 递归查询子节点的子节点
        }
    }
}

最后,我们可以定义一个Node类来表示节点信息,示例代码如下:

public class Node {
    private Long id;
    private Long parentId;

    // 省略构造方法、getter和setter
}

这里给出一个简单的示例来演示如何使用上述方法来查询所有子节点id

public class Main {
    public static void main(String[] args) {
        List<Node> nodeList = new ArrayList<>();
        // 添加节点信息到节点列表
        // nodeList.add(new Node(1L, null)); // 根节点
        // nodeList.add(new Node(2L, 1L)); // 1的子节点
        // nodeList.add(new Node(3L, 1L)); // 1的子节点
        // nodeList.add(new Node(4L, 2L)); // 2的子节点
        // nodeList.add(new Node(5L, 2L)); // 2的子节点
        
        Long parentId = 1L;
        List<Long> childIds = getAllChildIds(parentId, nodeList);
        System.out.println("Parent Node " + parentId + "'s child node ids: " + childIds);
    }
}

在这个示例中,我们创建了一个Node类来表示节点信息,并在Main类的main方法中演示了如何使用getAllChildIds方法来查询指定父节点下的所有子节点id。

结论
通过以上步骤,我们成功实现了Java中递归查询所有子节点id的功能。希望新手开发者通过学习和练习能够掌握这一重要的技能。祝你编程愉快!

标签:Node,nodeList,递归,节点,childIds,parentId,Java,id
From: https://www.cnblogs.com/wffzk/p/18234579

相关文章

  • provide inject vue3 父子组件 传参方式
    provideinjectvue3父子组件传参方式当子组件有30个的时候,这个就有优势了,在父组件provide一次,在子组件里面inject这个变量(实际上是通过hooks提供,也可以是个函数)。下面看下截图父组件:子组件:父组件provide子组件在父组件,就不用一堆props这里有一个特别的好处就是结构......
  • 【java面试】java中的继承知识
    文章目录原理说明代码示例在Java中,继承是一种面向对象编程(OOP)的重要特性,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。这有助于实现代码重用,并且允许我们定义类之间的层次结构。原理说明继承关系:子类继承父类的所有非......
  • Java-支持Java的服务器
    服务器服务器服务器类型服务器根据静态和动态加载数据,分为web服务器和应用服务器两种。web服务器提供代理服务,负责接收HTTP请求并返回HTTP响应。web服务器可以访问本地磁盘上所有的资源文件,但不能对HTTP请求/响应进行动态加载! web服务器接收的HTTP资源请......
  • Uncaught TypeError: Invalid attempt to spread non-iterable instance.
    1、报错信息:报错UncaughtTypeError:Invalidattempttospreadnon-iterableinstance.Inordertobeiterable,non-arrayobjectsmusthavea[Symbol.iterator]()method.at_nonIterableSpread(OgPanel.js:20:39)at_toConsumableArray(OgPanel.js:18:131)......
  • 基于java springboot高校自习室管理系统的设计与实现万字文档和PPT(源码+lw+部署文档+
    前言......
  • 基于java springboot高校医院门诊管理系统万字文档和PPT(源码+lw+部署文档+讲解等)
    前言......
  • 如何在Vue3中使用provide/inject实现跨组件状态共享?
    在前端开发中,组件之间的状态管理和数据共享是一个常见且重要的话题。Vue3作为一个流行的前端框架,提供了多种方法来解决这个问题。今天,我们将深入探讨在Vue3中使用provide和inject来实现跨组件状态共享的方法。什么是provide/inject?provide和inject是Vue3中提供的一种机制,......
  • Android财付通App(完整文件,实验报告,演示视频)
    移动数据库应用开发大作业题目:基于Android平台的理财通软件开发学院:信息工程学院专业:网络工程班号:学生姓名:指导教师:基于android平台的理财通软件开发学生姓名:饶明昌班级:170461指导老师:邬志红摘要:当今我们生活在一个数字信息化的时代,随着GPRS、GSM、CDMA、......
  • JavaScript string charCodeAt() vs codePointAt() All In One
    JavaScriptstringcharCodeAt()vscodePointAt()AllInOneString.prototype.charCodeAt()vsString.prototype.codePointAt()String值的charCodeAt()方法返回0到65535之间的整数,表示给定索引处的UTF-16代码单元。取值范围:[0,2^16]2**16//655362**1......
  • 基于Java的敬老院管理系统设计和实现(论文 + 源码)
    【免费】基于Java的敬老院管理系统设计和实现.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89399326基于Java的敬老院管理系统设计和实现摘要新世纪以来,互联网与计算机技术的快速发展,我国也迈进网络化、集成化的信息大数据时代。对于大众而言,单机应用......