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
相关产品推荐
相关产品推荐

