返回顶部
首页 > 资讯 > 后端开发 > Python >详解Java构建树结构的公共方法
  • 542
分享到

详解Java构建树结构的公共方法

Java构建树结构Java树结构 2023-05-16 14:05:31 542人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录一、前提二、代码三、使用1、实现Treenode接口2、使用3、样例一、前提 pId需要传入用来确认第一级的父节点,而且pId可以为null。树实体类必须实现:TreeNode接

一、前提

  • pId需要传入用来确认第一级的父节点,而且pId可以为null。
  • 树实体类必须实现:TreeNode接口
  • MyTreeVo必须有这三个属性:id、pId、children
  • 可以根据不同需求,配置TreeNode和MyTreeVo中固定的属性

二、代码

定义TreeNode接口

public interface TreeNode {
    String getId();
    String getpId();
    List getChildren();
}

需要将pId作为参数传入,在方法中添加一个pId参数,用于确认第一级的父节点。

  • 这个示例代码中,buildTree方法接收两个参数,一个是泛型类型的参数List,另一个是pId,用于确认第一级的父节点。在找到所有的根节点后,我们需要对每个根节点调用buildChildren方法,递归构建子节点。
  • 以便支持传入的pId作为顶级节点
public class TreeBuilder {
    
    public static <T extends TreeNode> List<T> buildTree(List<T> nodes, String pId) {
        List<T> roots = new ArrayList<>();
        for (T node : nodes) {
            if (node.getId().equals(pId) || (node.getParentId() == null && (pId == null || pId.equals(node.getId())))) {
                roots.add(node);
            }
        }
        for (T root : roots) {
            buildChildren(root, nodes);
        }
        return roots;
    }
 
    private static <T extends TreeNode> void buildChildren(T node, List<T> nodes) {
        for (T child : nodes) {
            if (child.getParentId() != null && child.getParentId().equals(node.getId())) {
                node.getChildren().add(child);
                buildChildren(child, nodes);
            }
        }
    }
}

构建到几级

  • 如果再增加一个参数,构建到树的第几层该如何实现?
  • 根据需求,如果增加一个参数来控制构建到树的第几层,可以在buildChildren方法中添加一个level参数,用于记录当前节点的层数。在递归构建子节点时,如果当前节点的层数小于指定的层数,则继续递归构建子节点,否则停止递归。以下是修改后的Java示例代码:
public class TreeBuilder {
     
     
    public static <T extends TreeNode> List<T> buildTree(List<T> nodes, String pId, int level) {
        List<T> roots = new ArrayList<>();
        for (T node : nodes) {
            if (node.getId().equals(pId) || (node.getParentId() == null && (pId == null || pId.equals(node.getId())))) {
                roots.add(node);
            }
        }
        for (T root : roots) {
            buildChildren(root, nodes, level, 1);
        }
        return roots;
    }
 
    private static <T extends TreeNode> void buildChildren(T node, List<T> nodes, int level, int currentLevel) {
        if (currentLevel >= level) {
            return;
        }
        for (T child : nodes) {
            if (child.getParentId() != null && child.getParentId().equals(node.getId())) {
                if (node.getChildren() == null) {
                    node.setChildren(new ArrayList<>());
                }
                node.getChildren().add(child);
                buildChildren(child, nodes, level, currentLevel + 1);
            }
        }
    }
}

三、使用

1、实现TreeNode接口

public class MyTreeVo implements TreeNode {
 
    
    private String id;
 
    
    private String pId;
 
    
    private List<MyTreeVo> children = Lists.newArrayList();
 
    //其他属性……
 
    public List<MyTreeVo> getChildren() {
        return children;
    }
 
    public String getId() {
        return id;
    }
 
    public String getpId() {
        return pId;
    }
 
    //其他属性的getter、setter……

2、使用

  • pId可以传入null,也可以传入需要从哪个节点(X)开始构造的 X的id
List<MyTreeVo> tree = TreeUtilQz.buildTree(vos,null);
//tree就是构建好的树结构数据

3、样例

{
    "data": [
        {
            "id": "e6ee51485389495cb923a122be800011",
            "pId": "",
            "name": "一、钢管钢管",
            "children": [
                {
                    "id": "e6ee51485389495cb923a122be800014",
                    "pId": "e6ee51485389495cb923a122be800011",
                    "name": "(二)嘎嘎嘎嘎嘎",
                    "children": []
                },
                {
                    "id": "e6ee51485389495cb923a122be800013",
                    "pId": "e6ee51485389495cb923a122be800011",
                    "name": "(一)顶顶顶顶",
                    "children": []
                }
            ]
        },
        {
            "id": "e6ee51485389495cb923a122be800012",
            "pId": "",
            "name": "二、噢噢噢噢",
            "children": [
                {
                    "id": "e6ee51485389495cb923a122be800015",
                    "pId": "e6ee51485389495cb923a122be800012",
                    "name": "二的下级",
                    "children": [
                        {
                            "id": "e6ee51485389495cb923a122be800016",
                            "pId": "e6ee51485389495cb923a122be800015",
                            "name": "二的下级的下级",
                            "children": []
                        }
                    ]
                }
            ]
        }
    ]
}

到此这篇关于详解Java构建树结构的公共方法的文章就介绍到这了,更多相关Java构建树结构内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 详解Java构建树结构的公共方法

本文链接: https://lsjlt.com/news/209937.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 详解Java构建树结构的公共方法
    目录一、前提二、代码三、使用1、实现TreeNode接口2、使用3、样例一、前提 pId需要传入用来确认第一级的父节点,而且pId可以为null。树实体类必须实现:TreeNode接...
    99+
    2023-05-16
    Java构建树结构 Java 树结构
  • Java构建树结构的公共方法是什么
    这篇“Java构建树结构的公共方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java构建树结构的公共方法是什么”文...
    99+
    2023-07-06
  • 详解Java中的树结构
    这篇文章将为大家详细讲解有关详解Java中的树结构,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种基于Java...
    99+
    2023-06-14
  • 利用JavaScript构建树形图的方法详解
    目录什么是树形图浏览JS树形图创建一个基本的JS树形图1. 创建一个HTML页面2. 参考JavaScript文件3.设置数据4. 编写一些JS树形图代码自定义JS树形图A. 改变颜...
    99+
    2024-04-02
  • Java数据结构之线段树详解
    目录介绍代码实现线段树构建区间查询更新总结介绍 线段树(又名区间树)也是一种二叉树,每个节点的值等于左右孩子节点值的和,线段树示例图如下 以求和为例,根节点表示区间0-5的和,左孩...
    99+
    2024-04-02
  • TypeScript实现字符串转树结构的方法详解
    目录前言思路分析实现代码示例代码前言 有一个多行字符串,每行开头会用空格来表示它的层级关系,每间隔一层它的空格总数为2,如何将它转为json格式的树型数据?本文就跟大家分享下这个算法...
    99+
    2024-04-02
  • 详解Java递归实现树形结构的两种方式
    目录0、引言1、数据准备2、类型转化3、递归实现方法3.1、Java7及以下纯Java递归实现3.2、Java8及以上借助lamda表达式实现0、引言 在开发的过程中,很多业务场景需...
    99+
    2022-11-13
    Java递归实现树形结构 Java树形结构 Java递归
  • Python常用数据结构和公共方法技巧总结
    目录1. 列表1.1 列表的定义1.2 列表常用操作1.3 循环遍历1.4 应用场景2. 元组2.1 元组的定义2.2 元组常用操作2.3 循环遍历2.4 应用场景3. 字典3.1 ...
    99+
    2024-04-02
  • 详解Java数据结构之平衡二叉树
    目录什么是二叉搜索树平衡二叉搜索树平衡二叉搜索树建树程序计算每个节点的高度计算每个节点的平衡因子合并二叉树旋转调整函数整体代码什么是二叉搜索树 简单来说,就是方便搜索的二叉树,是一种...
    99+
    2024-04-02
  • Java数据结构之二叉搜索树详解
    目录前言性质实现节点结构初始化插入节点查找节点删除节点最后前言 今天leetcode的每日一题450是关于删除二叉搜索树节点的,题目要求删除指定值的节点,并且需要保证二叉搜索树性质不...
    99+
    2024-04-02
  • java树结构stream工具类的示例代码详解
    菜单实体类 package com.example.demo.entity; import lombok.AllArgsConstructor; import lombok.Bu...
    99+
    2024-04-02
  • Java红黑树的数据结构与算法解析
    目录红黑树的介绍红黑树的实现1.节点2.查找3.平衡化颜色反转 插入的实现红黑树的复杂度–总结红黑树的介绍 红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的...
    99+
    2024-04-02
  • springboot构造树形结构数据并查询的方法
    因为项目需要,页面上需要树形结构的数据进行展示(类似下图这样),因此需要后端返回相应格式的数据。 不说废话,直接开干!!! 我这里用的是springboot+mybatis-pl...
    99+
    2024-04-02
  • Python实现二叉树结构与进行二叉树遍历的方法详解
    二叉树的建立 使用类的形式定义二叉树,可读性更好 class BinaryTree: def __init__(self, root): self.key = root sel...
    99+
    2022-06-04
    二叉树 遍历 详解
  • Java数据结构之栈的线性结构详解
    目录一:栈二:栈的实现三:栈的测试四:栈的应用(回文序列的判断)总结一:栈 栈是限制插入和删除只能在一个位置上进行的表,此位置就是表的末端,叫作栈顶。 栈的基本操作分为push(入...
    99+
    2024-04-02
  • Java 数据结构篇-实现 AVL 树的核心方法
    🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍  文章目录         1.0 AVL 树的说明         2.0 AVL 树的成员变量及其构造方法         ...
    99+
    2024-01-21
    数据结构 算法 java
  • Python 数据结构之树的概念详解
    数据结构树简介 一、树简介 树(Tree)是一种抽象的数据结构,是一个数据的集合,集合中的数据组成了一个树状结构。例如上图,看起来像一棵倒挂的树,根朝上叶朝下。 树是由n(n>...
    99+
    2024-04-02
  • 用 PHP 构建先进的搜索树数据结构
    使用 php 构建高级搜索树涉及创建节点类 (node) 和搜索树类 (searchtree),以及实现插入、查找和删除元素的方法。这些元素以对数时间复杂度存储在一个二叉树中,每个节点包...
    99+
    2024-05-07
    php 搜索树
  • Java数据结构之平衡二叉树的实现详解
    目录定义结点结构查找算法插入算法LL 型RR 型LR 型RL 型插入方法删除算法概述实例分析代码完整代码定义 动机:二叉查找树的操作实践复杂度由树高度决定,所以希望控制树高,左右子...
    99+
    2024-04-02
  • Java数据结构之线段树中的懒操作详解
    目录一、问题提出二、区间更新三、区间查询四、实战1.问题描述2.输入3.代码4.测试一、问题提出 对于线段树,若要求对区间中的所有点都进行更新,可以引入懒操作。 懒操作包括区间更新和...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作