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

如何对自引用父子结构产品列表子值求和并填充父节点空值

实现方案

你之前只存储了HashMap没拿到正确结果,大概率是采用了从上到下的计算顺序,父节点计算时子节点的最终值还没确定,所以求和结果不对。这个场景必须从最底层的叶子节点向上计算,具体步骤如下:

  • 第一步:预处理数据构建映射与树形关系
    1. 把所有产品实体存入HashMap<String, Product>,key 为产品 Name 字段,方便快速查找父节点
    2. 给每个产品实体新增children字段用来存储直属子节点,遍历所有产品:如果产品的 Parent 不为 null,就把当前产品加入对应父节点的children列表中
  • 第二步:递归计算节点值
    写一个递归函数实现自底向上的计算,逻辑如下(以Java为例,其他语言逻辑一致):
    // 入参为当前产品节点,返回当前节点的最终Value值
    int calculateNodeValue(Product node) {
        // 节点本身有明确值直接返回
        if (node.Value != null) {
            return node.Value;
        }
        int total = 0;
        // 递归累加所有子节点的返回值
        for (Product child : node.children) {
            total += calculateNodeValue(child);
        }
        // 把计算结果赋值给当前节点的Value字段
        node.Value = total;
        return total;
    }
    
  • 第三步:触发全量计算
    遍历所有 Parent 为 null 的根节点,依次调用calculateNodeValue方法即可完成所有节点的数值计算。
注意事项

如果你的业务场景可能出现产品循环引用(比如A的父节点是B,B的父节点是A),需要在递归时增加节点访问标记,避免出现死循环。正常合法的树形产品结构不需要额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:15:06