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

基于子节点值计算设置n深度树(字典)父节点值的技术问询

递归计算树形字典的父节点值

这是个很常见的树形结构遍历问题,核心思路就是从叶子节点往上回溯——因为父节点的值完全依赖子节点的计算结果,所以必须先把所有子节点的value搞定,再处理父节点。我给你写个Python实现,逻辑简单直接,还容易扩展:

核心实现代码

def calculate_parent_values(node):
    # 优先递归处理所有子节点,确保子节点的value都已计算完成
    if 'children' in node and node['children']:
        for child in node['children']:
            calculate_parent_values(child)
        # 用所有子节点的value之和更新当前节点的value
        node['value'] = sum(child['value'] for child in node['children'])
    # 叶子节点的value已经有值,无需处理
    return node

测试示例

用你给出的结构(补全了b.2的子节点)来验证:

# 示例树形结构
tree = {
    "name": "root",
    "value": None,
    "children": [
        {
            "name": "a",
            "value": None,
            "children": [
                { "name": "a.1", "value": 10 },
                { "name": "a.2", "value": 20 }
            ]
        },
        {
            "name": "b",
            "value": None,
            "children": [
                { "name": "b.1", "value": 25 },
                {
                    "name": "b.2",
                    "value": None,
                    "children": [
                        {"name": "b.2.1", "value": 5},
                        {"name": "b.2.2", "value": 20}
                    ]
                }
            ]
        }
    ]
}

# 执行计算
updated_tree = calculate_parent_values(tree)

# 验证结果
print(updated_tree['value'])  # 输出80(符合预期)
print(updated_tree['children'][0]['value'])  # 输出30
print(updated_tree['children'][1]['value'])  # 输出50
print(updated_tree['children'][1]['children'][1]['value'])  # 输出25

关键逻辑说明

  • 递归顺序:必须先遍历所有子节点,再计算当前节点的值。这个顺序保证了求和时,子节点的value已经是最终的计算结果。
  • 原地修改:因为Python的字典是可变对象,递归中对child的修改会直接反映到原树形结构里。如果你不想修改原数据,可以在函数里创建新字典返回,稍微调整下代码就行。
  • 边界处理:通过'children' in node and node['children']判断节点是否有子节点,避免对叶子节点执行求和操作。

扩展:支持自定义聚合逻辑

如果之后需要用其他逻辑计算父节点值(比如取子节点的最大值、平均值),可以把聚合函数作为参数传入,让代码更灵活:

def calculate_parent_values(node, agg_func=sum):
    if 'children' in node and node['children']:
        for child in node['children']:
            calculate_parent_values(child, agg_func)
        node['value'] = agg_func(child['value'] for child in node['children'])
    return node

# 示例:计算子节点的最大值
calculate_parent_values(tree, max)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:27:21