如何在python的递归函数中维护全局变量?

如何在python的递归函数中维护全局变量?,python,algorithm,recursion,data-structures,Python,Algorithm,Recursion,Data Structures,无法跟踪变量maxSum,在递归调用后,它会一直重置回0,尽管它在调用中作为参数传递。函数maxPathSum应该返回11,但它返回0 class TreeNode: def __init__(self, val, left=None, right=None): self.val = val self.left = left self.right = right def maxPathSum(node): sums = []

无法跟踪变量maxSum,在递归调用后,它会一直重置回0,尽管它在调用中作为参数传递。函数maxPathSum应该返回11,但它返回0

class TreeNode:
    def __init__(self, val, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def maxPathSum(node):
    sums = []
    maxPath = []
    maxSum = 0
    recursiveSum(node, 0, maxSum, sums)
    return maxSum


def recursiveSum(node, ssum, maxSum, sums):
    if node == None:
        return
    
    if maxSum < ssum + node.val and node.left == None and node.right == None:
        maxSum = ssum + node.val
            
    sums.append(maxSum)
    
    # traverse left subtree
    recursiveSum(node.left, ssum + node.val, maxSum, sums)
    # traverse right subtree
    recursiveSum(node.right, ssum + node.val, maxSum, sums)


root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
root.right.left = TreeNode(7)
root.right.right = TreeNode(6)
print(maxPathSum(root))
class树节点:
定义初始化(self,val,左=无,右=无):
self.val=val
self.left=左
self.right=right
def maxPathSum(节点):
总和=[]
maxPath=[]
最大和=0
递归求和(节点,0,最大求和,求和)
返回最大和
def recursiveSum(节点、ssum、maxSum、sums):
如果节点==无:
返回
如果maxSum
您可以通过以下两种修改之一实现您的目标

由于您从
maxSum
值构建了一个列表,因此只需更改
maxPathSum
函数的最后一行即可:

def maxPathSum(node):
    sums = []
    maxPath = []
    maxSum = 0
    recursiveSum(node, 0, maxSum, sums)
    return max(sums)
或者您可以使用
maxSum
变量,但为此,您必须对这两个函数进行一些小的修改:

def maxPathSum(node):
    sums = []
    maxPath = []
    maxSum = 0
    maxSum=recursiveSum(node, 0, maxSum, sums)
    return maxSum

def recursiveSum(node, ssum, maxSum, sums):
    if node == None:
        return
    
    if maxSum < ssum + node.val and node.left == None and node.right == None:
        maxSum = ssum + node.val
            
    sums.append(maxSum)
    
    # traverse left subtree
    s=recursiveSum(node.left, ssum + node.val, maxSum, sums)
    if s!=None: maxSum=max(maxSum,s)
    # traverse right subtree
    s=recursiveSum(node.right, ssum + node.val, maxSum, sums)
    if s!=None: maxSum=max(maxSum,s)
    return maxSum
def maxPathSum(节点):
总和=[]
maxPath=[]
最大和=0
maxSum=recursiveSum(节点,0,maxSum,总和)
返回最大和
def recursiveSum(节点、ssum、maxSum、sums):
如果节点==无:
返回
如果maxSum
使用(如果节点为无:)而不是(如果节点==无:)。我不知道这是否能解决问题。但我认为这样您的代码会编写得更好。@SimranBhake将
return maxSum
更改为
return max(sums)
函数中的
return max(sums)
,或者尝试第二个答案中建议的其他解决方案。@SimranBhake我很高兴听到这个消息。你可以考虑给答案一个赞成票。