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

Python字典树递归求和:计算各分支子节点price属性总和

解决Python字典树的分支节点总和计算问题

没问题,这事儿用递归就能轻松搞定,我给你捋清楚思路再上代码示例。

首先咱们先对齐一下树的结构(我假设你的字典结构大概是这样的,要是和实际结构有出入,调整下判断逻辑就行):

  • 叶子节点:带type: "leaf"和price属性,没有子节点
  • 分支节点:带type: "branch"和children列表,需要新增sum属性存储所有子节点的price总和

先整个示例树方便测试:

# 示例树结构
tree = {
    "type": "branch",
    "children": [
        {"type": "leaf", "price": 10},
        {
            "type": "branch",
            "children": [
                {"type": "leaf", "price": 20},
                {"type": "leaf", "price": 30}
            ]
        },
        {
            "type": "branch",
            "children": [
                {"type": "branch", "children": [{"type": "leaf", "price": 40}]},
                {"type": "leaf", "price": 50}
            ]
        }
    ]
}

接下来是核心的递归函数,它会遍历每个节点,给所有分支节点计算并添加sum属性:

def calculate_branch_sums(node):
    # 处理叶子节点:直接返回price,供父节点累加
    if node["type"] == "leaf":
        return node["price"]
    
    # 处理分支节点:遍历所有子节点,递归计算总和
    elif node["type"] == "branch":
        total_sum = 0
        for child in node["children"]:
            # 递归调用,子节点如果是分支,返回的就是它的sum;如果是叶子,返回price
            total_sum += calculate_branch_sums(child)
        # 把计算结果存入当前分支的sum属性
        node["sum"] = total_sum
        # 返回当前分支的总和,供上层分支节点计算
        return total_sum
    
    # 处理未知节点类型,避免出错
    else:
        raise ValueError(f"不支持的节点类型:{node['type']}")

调用这个函数超简单,直接传入根节点就行:

# 计算所有分支的sum
calculate_branch_sums(tree)

现在你可以查看每个分支节点的sum属性了:

  • 根节点的sum是 10 + 50 + 90 = 150
  • 第二个子分支的sum是 20 + 30 = 50
  • 第三个子分支的sum是 40 + 50 = 90
  • 第三个子分支里的子分支sum是 40

这个逻辑的关键是:递归函数会自底向上计算——先处理所有子节点(不管是叶子还是子分支),把它们的贡献值累加起来,再赋值给当前分支的sum,同时把这个值返回给上层节点,这样上层分支就能继续累加所有子节点的总和。

如果你的树结构里分支节点的键名不是children,或者叶子节点的键名不是price,只需要修改函数里对应的键名就行,逻辑是通用的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:51:53