Java 树结构 TreeNode 表格 工具类

本文档介绍在Java开发中如何创建和使用TreeNode类来构建树结构,包括基础类和构建类的创建,并提供了使用步骤及测试案例,适用于后端菜单、部门树等场景。
摘要由CSDN通过智能技术生成

记录


前言

本文档基于若依框架编写
项目地址:https://gitee.com/y_project/RuoYi-Cloud


提示:以下是本篇文章正文内容,下面案例可供参考

一、TreeNode 通用树结构使用

日常开发经常会遇到此类表单

在这里插入图片描述
那么这种树结构是如何实现的呢

若依框架中给出了实现(贴出部分代码):

菜单树
菜单树

部门树
部门树
对此做稍稍改动

1. 创建TreeNode树结构基础类

/**
 * @author
 * @description TODO
 * @date 2022/5/5 17:27
 */

@Data
@AllArgsConstructor
@NoArgsConstructor
public class TreeNode<T> {
   

    /**
     * 节点ID
     */
    private Integer id;

    /**
     * 父节点ID:顶级节点为0
     */
    private Integer parentId;

    /**
     * 节点名称
     */
    private String name;

    /**
     * 子节点
     */
    private List<T> children = new ArrayList<>();

}

2. 创建通用树结构构建类

/**
 * @author
 * @description TODO
 * @date 2022/5/5 17:29
 */
public class TreeBuild {
   

    public List<TreeNode> nodeList = new ArrayList<>();

    /**
     * 构造方法
     *
     * @param nodeList 将数据集合赋值给nodeList,即所有数据作为所有节点。
     */
    public TreeBuild(List<TreeNode> nodeList) {
   
        this.nodeList 
  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个 Java 工具类,可以将树形结构数据输出为字符串: ```java import java.util.List; public class TreePrinter { private static final String LINE_PREFIX = " "; private static final String BRANCH_PREFIX = "│ "; private static final String LAST_BRANCH_PREFIX = "└── "; public static <T extends TreeNode> String printTree(T root) { StringBuilder sb = new StringBuilder(); printNode(sb, "", root, true); return sb.toString(); } private static <T extends TreeNode> void printNode(StringBuilder sb, String prefix, T node, boolean isLast) { sb.append(prefix); if (isLast) { sb.append(LAST_BRANCH_PREFIX); prefix += LINE_PREFIX; } else { sb.append(BRANCH_PREFIX); prefix += BRANCH_PREFIX; } sb.append(node.getName()); sb.append("\n"); List<T> children = node.getChildren(); if (children != null) { int size = children.size(); for (int i = 0; i < size; i++) { boolean last = i == size - 1; printNode(sb, prefix, children.get(i), last); } } } public interface TreeNode { String getName(); List<? extends TreeNode> getChildren(); } } ``` 使用方法: 1. 实现 `TreeNode` 接口,并实现其中的两个方法 `getName()` 和 `getChildren()`,分别返回节点名称和子节点列表。 2. 调用 `TreePrinter.printTree(root)` 方法,其中 `root` 为树的根节点。 以下是一个简单的例子: ```java import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { TreeNode root = new Node("root"); Node node1 = new Node("node1"); Node node2 = new Node("node2"); Node node3 = new Node("node3"); Node node4 = new Node("node4"); Node node5 = new Node("node5"); Node node6 = new Node("node6"); root.addChild(node1); root.addChild(node2); root.addChild(node3); node2.addChild(node4); node2.addChild(node5); node3.addChild(node6); String tree = TreePrinter.printTree(root); System.out.println(tree); } static class Node implements TreePrinter.TreeNode { private String name; private List<Node> children; public Node(String name) { this.name = name; this.children = new ArrayList<>(); } public void addChild(Node child) { children.add(child); } @Override public String getName() { return name; } @Override public List<Node> getChildren() { return children; } } } ``` 输出结果为: ``` └── root ├── node1 ├── node2 │ ├── node4 │ └── node5 └── node3 └── node6 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值