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

如何实现层级不固定的树形结构中子节点values值向父节点累加?

树形结构子节点值向父节点累加的实现方案

针对层级不固定的树形结构,要实现子节点的所有values值累加到其所有父节点的对应values中,**后序遍历(深度优先递归)**是最可行的方案——先处理所有子节点,再将子节点的统计值向上合并到父节点,完美适配任意层级的树形结构。

实现代码(JavaScript)

function accumulateChildValues(node) {
    // 先递归处理所有子节点
    node.children.forEach(child => accumulateChildValues(child));

    // 计算当前节点所有子节点的values总和(按name分组)
    const childTotal = {};
    node.children.forEach(child => {
        child.values.forEach(item => {
            if (!childTotal[item.name]) {
                childTotal[item.name] = 0;
            }
            childTotal[item.name] += item.value;
        });
    });

    // 将子节点总和累加到当前节点的对应values中
    node.values.forEach(item => {
        if (childTotal[item.name]) {
            item.value += childTotal[item.name];
        }
    });

    return node;
}

// 处理树形数组(示例输入)
const tree = [
    {
        "level_key":"lvl1",
        "level_value":"Code1",
        "values":[{"name":"a","value":0},{"name":"b","value":0}],
        "children":[
            {
                "level_key":"lvl2",
                "level_value":"Type1",
                "values":[{"name":"a","value":0},{"name":"b","value":0}],
                "children":[
                    {
                        "level_key":"lvl3",
                        "level_value":"Desc1",
                        "values":[{"name":"a","value":0},{"name":"b","value":0}],
                        "children":[
                            {"level_key":"lvl4","level_value":"Check1","values":[{"name":"a","value":2},{"name":"b","value":3}],"children":[]},
                            {"level_key":"lvl4","level_value":"Check2","values":[{"name":"a","value":4},{"name":"b","value":5}],"children":[]}
                        ]
                    }
                ]
            }
        ]
    }
];

// 执行处理
tree.forEach(node => accumulateChildValues(node));

// 输出结果
console.log(JSON.stringify(tree, null, 2));

代码逻辑说明

  1. 递归遍历子节点:先对当前节点的所有子节点执行递归处理,确保最底层的叶子节点先完成计算,再向上传递结果。
  2. 统计子节点总和:遍历当前节点的所有子节点,按values中的name分组,累加对应value的总和。
  3. 累加至当前节点:将子节点的分组总和,加到当前节点对应name的value上。
  4. 适配任意层级:无论树形结构有多少层,递归都会自动遍历到所有叶子节点,无需固定层级。

验证结果

执行上述代码后,输出结构与期望结果完全一致:

  • lvl4节点保持原始值不变
  • lvl3节点的a=2+4=6,b=3+5=8
  • lvl2、lvl1节点的values也会依次累加得到相同的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:10:53