You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现按层级扁平化动态层次树并限制遍历深度与返回数量

解决方案

核心思路

你当前使用的是深度优先遍历(DFS),会优先遍历单个分支的最深节点,不符合按层级输出的要求。改为**广度优先遍历(BFS,层序遍历)**即可实现需求:用队列存储待处理的节点及对应深度,逐层处理子节点,保证输出顺序严格按照层级从浅到深。同时保留LinkedHashSet做去重,避免循环引用问题。

修改后代码

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
import java.util.AbstractMap;
import java.util.LinkedHashSet;
import java.util.Queue;
import java.util.LinkedList;
import java.util.Map;
import java.util.Set;

@GET
@Path("/GetDatas")
public Response getDatas(@QueryParam("clientId") final String clientId,
                         @QueryParam("maxDepth") final Integer maxDepth,
                         @QueryParam("limit") final Integer limit) {
    // 保留LinkedHashSet:保证插入顺序符合层级要求+自动去重防循环
    Set<String> datas = new LinkedHashSet<>();
    // 队列存储<节点ID, 当前深度>,根节点初始深度为0
    Queue<Map.Entry<String, Integer>> queue = new LinkedList<>();
    queue.add(new AbstractMap.SimpleEntry<>(clientId, 0));

    while (!queue.isEmpty() && datas.size() < limit) {
        Map.Entry<String, Integer> current = queue.poll();
        String currentId = current.getKey();
        Integer currentDepth = current.getValue();

        // 已达最大深度,不再遍历子节点
        if (currentDepth >= maxDepth) {
            continue;
        }

        // 替换为你实际的REST接口调用逻辑获取当前节点的子节点
        Set<String> results = function(currentId);

        for (String child : results) {
            // 达到条数限制直接终止
            if (datas.size() >= limit) {
                break;
            }
            // 已存在的节点直接跳过,避免循环引用
            if (!datas.contains(child)) {
                datas.add(child);
                // 子节点深度为当前深度+1,加入队列待后续处理
                queue.add(new AbstractMap.SimpleEntry<>(child, currentDepth + 1));
            }
        }
    }

    return Response.status(Response.Status.OK).entity(datas).build();
}

逻辑验证

完全匹配你给出的示例要求:

  1. 深度设为100、限制100条时:输出顺序为2 3 4 5 6 7 8 9
  2. 深度为1、限制100条时:仅输出第一层子节点2 3
  3. 深度为2、限制5条时:输出前5个节点2 3 4 5 6

内容的提问来源于stack exchange,提问作者Leamas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 00:21:03