Java 动态树的实现思路分析

Java 动态树的实现

Survive by day and develop by night.

talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive.

happy for hardess to solve denpendies.

目录

概述

树形菜单非常常见的需求。

需求:

设计思路

树形菜单我们常见的一种需求。

实现思路分析

1. 简单Java实现:

Java 动态树的实现思路如下:

  1. 定义树节点类:首先需要定义一个树节点类,包含节点值和子节点列表。
java 复制代码
class TreeNode {
    int value;
    List<TreeNode> children;
}
  1. 实现动态添加子节点的方法:通过给树节点类添加一个方法,可以动态地添加子节点。
java 复制代码
class TreeNode {
    int value;
    List<TreeNode> children;

    void addChild(TreeNode child) {
        if (children == null) {
            children = new ArrayList<>();
        }
        children.add(child);
    }
}
  1. 实现动态删除子节点的方法:同样给树节点类添加一个方法,可以动态地删除子节点。
java 复制代码
class TreeNode {
    int value;
    List<TreeNode> children;

    void removeChild(TreeNode child) {
        if (children != null) {
            children.remove(child);
        }
    }
}
  1. 实现遍历树节点的方法:可以使用递归或者栈来实现树的遍历。以下是一个递归的示例:
java 复制代码
class TreeNode {
    int value;
    List<TreeNode> children;

    void traverse() {
        System.out.println(value);
        if (children != null) {
            for (TreeNode child : children) {
                child.traverse();
            }
        }
    }
}
  1. 创建根节点和添加子节点:使用上述定义的树节点类,可以创建根节点并添加子节点。
java 复制代码
public class Main {
    public static void main(String[] args) {
        TreeNode root = new TreeNode();
        root.value = 1;

        TreeNode child1 = new TreeNode();
        child1.value = 2;
        root.addChild(child1);

        TreeNode child2 = new TreeNode();
        child2.value = 3;
        root.addChild(child2);

        root.traverse();
    }
}

2.建立父子表存储

1.建立一张父子关系表

2.遍历父子节点

3.返回节点控制

3.前端的对应的json 字符串方式

这种方式就是前段整理好对应的json格式的树形结构,后端存储的时候

保存这个json 串。

添加的时候增加到对应的一个字段中,这个字段存储的是json 字符。

当前台界面变化时,数据的组织形式发生改变,

当没有的时候,字段为空,不矛盾。

提供增加和修改的方法,

当修改的时候,

一种思路是:

先查出对应的json 串,把json 看成一个bean 实体,然后解析封装成一个实体,设置对应的bean 实体,更改变化的树节点,然后保存

另一种思路是:

当删除时,前端重新组包,格式化更新到数据库中。

即可

参考资料和推荐阅读

参考资料
官方文档
开源社区
博客文章
书籍推荐

欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!同时,期望各位大佬的批评指正~

相关推荐
暮志未晚Webgl8 分钟前
109. UE5 GAS RPG 实现检查点的存档功能
android·java·ue5
DanielYQ10 分钟前
LCR 001 两数相除
开发语言·python·算法
yngsqq15 分钟前
037集——JoinEntities连接多段线polyline和圆弧arc(CAD—C#二次开发入门)
开发语言·c#·swift
Zԅ(¯ㅂ¯ԅ)17 分钟前
C#桌面应用制作计算器进阶版01
开发语言·c#
过期的H2O218 分钟前
【H2O2|全栈】JS进阶知识(七)ES6(3)
开发语言·javascript·es6
一路冰雨29 分钟前
Qt打开文件对话框选择文件之后弹出两次
开发语言·qt
小叶lr34 分钟前
idea 配置 leetcode插件 代码模版
java·leetcode·intellij-idea
松树戈37 分钟前
JS推荐实践
开发语言·javascript·ecmascript
qq_4298565738 分钟前
idea启动服务报错Application run failed
java·ide·intellij-idea
瑞雨溪40 分钟前
java中的this关键字
java·开发语言