python - 递归返回变量值
问题描述
我想返回树中所有左叶的值的总和,但是当它返回给调用者时,我的“总”变量中的值似乎正在丢失。我能知道解决这个问题的方法吗?
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def sumOfLeftLeaves(self, root: TreeNode) -> int:
total = 0
if root is None:
return 0
if root.left:
sum1 = self.getLeftSum(root.left, total)
if root.right:
sum2 = self.getLeftSum(root.right, total)
return sum1 + sum2
def getLeftSum(self, cur_node, total):
if cur_node.left:
self.getLeftSum(cur_node.left, total)
if cur_node.left is None and cur_node.right is None:
total += cur_node.val
return total
解决方案
我认为这是一对相互交织的递归函数:
class Solution:
def sumOfLeftLeaves(self, node):
total = 0
if node:
if node.left:
total += self.sumOfLeftLeaf(node.left)
return total + self.sumOfLeftLeaves(node.right)
return total
def sumOfLeftLeaf(self, node):
total = node.val
if node.left:
total += self.sumOfLeftLeaf(node.left)
return total + self.sumOfLeftLeaves(node.right)
一个是通用节点处理程序,另一个专门处理左手节点。
推荐阅读
- java - K-means 中的总距离总和是否必须始终减少?
- r - 检查日期列表是否在 r 的日期范围内
- php - 使用 Pusher 和 Vue.js 在 laravel 聊天中的 GET 和 POST 问题
- java - 按钮 onClickListener 在 Android 中无法播放声音
- javascript - Spectron 异步 isExisting 不返回 false
- python - 连接 Keras 模型/替换输入但保留层
- xcode - 不支持的会话配置(React Native 和 ARKit)
- firebase - 删除用户经过身份验证的 Firebase 角度 5
- ruby-on-rails - SearchKick search_data vs searchable
- javascript - 通过 WP 中的自定义查询将一个投资组合库 URL 链接到另一个