首页 > 解决方案 > 递归返回变量值

问题描述

我想返回树中所有左叶的值的总和,但是当它返回给调用者时,我的“总”变量中的值似乎正在丢失。我能知道解决这个问题的方法吗?

# 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

标签: pythonrecursion

解决方案


我认为这是一对相互交织的递归函数:

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)

一个是通用节点处理程序,另一个专门处理左手节点。


推荐阅读