树形结构无限极分类数据结构以及递归函数写法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40990836/article/details/84963459

概述

很多人见过菜单导航之类的东西吧,还有分类什么的。就是一级数据下面有二级三级甚至更多,这种数据就需要用到这个树形结构了。

代码实现

废话不多说。先创建菜单的实体类吧
我是直接用的实体类里面的 main方法 写了个静态代码块用来模拟数据的。 数据库建模和这个差不多就行。
下面上方法

public class NavTree {
    // 创建一个静态的集合用来模拟从数据库中取出的数据
    private static List<NavTree> list = new ArrayList<>();
    // 主键ID
    private Long id;
    // 名称
    private String name;
    // 父级ID
    private Long parentId;
    // 用来保存这个树中的树杈
    private List<NavTree> trees = new ArrayList<>();

    public List<NavTree> getTrees() {
        return trees;
    }

    public void setTrees(List<NavTree> trees) {
        this.trees = trees;
    }

    public NavTree() {
    }


    public NavTree(Long id, String name, Long parentId) {
        this.id = id;
        this.name = name;
        this.parentId = parentId;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Long getParentId() {
        return parentId;
    }

    public void setParentId(Long parentId) {
        this.parentId = parentId;
    }

    @Override
    public String toString() {
        return "NavTree{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", parentId=" + parentId +
                ", trees=" + trees +
                '}';
    }

    // 静态代码块,用来初始化数据
    static {
            list.add(new NavTree(1L,"aa",0L));
            list.add(new NavTree(2L,"bb",0L));
            list.add(new NavTree(3L,"cc",0L));
            list.add(new NavTree(33L,"dd",1L));
            list.add(new NavTree(44L,"ee",1L));
            list.add(new NavTree(55L,"ff",2L));
            list.add(new NavTree(66L,"gg",2L));
            list.add(new NavTree(77L,"qq",3L));
            list.add(new NavTree(88L,"tt",33L));
            list.add(new NavTree(99L,"zz",33L));
    
        }

    // 递归函数 用来创建树形结构  
    public static NavTree getTree( NavTree tree,List<NavTree> trees2){
    // 创建一个集合给实体类添加树杈
    ArrayList<NavTree> trees = new ArrayList<>();
    // 循环遍历传进来的集合。
    for (NavTree t:trees2 ) {
        // 通过ID判断是否拥有子菜单
        if (tree.getId() == t.getParentId()){
            // 并且递归到下一个函数中查看是否还存在子集
            getTree(t,trees2);
            // 如果拥有 就添加到集合中
            trees.add(t);
        }
    }
    // 如果不存在给出一个出口。返回
    tree.setTrees(trees);
    return tree;
    }

猜你喜欢

转载自blog.csdn.net/qq_40990836/article/details/84963459