美文网首页
树型结构的查询

树型结构的查询

作者: 不知不怪 | 来源:发表于2023-06-19 14:11 被阅读0次

树型结构如果用二维表格保存时
当然如果计设时增加 一些辅助子段 是否为叶子 层级编码 01 0101 0102 010201 010202
这时查询是很容易的
只有一个parentId的情况
如何查询一个结点的所有子孙结点呢?

package com.gzz.sys;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.util.CollectionUtils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author 高振中
 * @date 2023-06-18 00:16:57
 **/
public class Tree {
    public static void main(String[] args) {
        List<Integer> result = new ArrayList<>();
        List<Classfy> classfys = List.of(
        new Classfy(1,0,1) ,
            new Classfy(2,1,2),
                new Classfy(3,2,3),
                new Classfy(4,2,4), 
            new Classfy(5,1,5), 
                new Classfy(6,5,6),
                new Classfy(7,5,7), 
                    new Classfy(8,7,8), 
                new Classfy(9,5,9), 
                    new Classfy(10, 9, 10));
        Map<Integer, Classfy> treeMap = new HashMap<>();

        classfys.forEach(dept -> {
            treeMap.put(dept.getId(), dept);
            if (dept.getParentId() != 0)
                treeMap.get(dept.getParentId()).getChildren().add(dept);
        });
        
        List<Integer> param = List.of(5);
        for (Integer id : param)
            children(treeMap.get(id), result);
        System.out.println(result);
    }

    static void children(Classfy classfy, List<Integer> result) {
        List<Classfy> children = classfy.getChildren();
        if (!CollectionUtils.isEmpty(children))
            children.forEach(child -> children(child, result));
        result.add(classfy.getId());
    }
}

@Data
@AllArgsConstructor
@NoArgsConstructor
class Classfy {
    public Classfy(Integer id, Integer parentId, Integer name) {
        super();
        this.id = id;
        this.parentId = parentId;
        this.name = name;
    }
    private Integer id;
    private Integer parentId;
    private Integer name;
    private List<Classfy> children = new ArrayList<>();
}

相关文章

网友评论

      本文标题:树型结构的查询

      本文链接:https://www.haomeiwen.com/subject/gsnxedtx.html