首页 > 解决方案 > 二叉树递归参数未更新

问题描述

我正在尝试编写一个函数返回所有二叉树的子树节点深度的总和。这是我的第一次尝试,我尝试将深度总和存储在“sumOfDepths”中并在递归期间传递它:

def allKindsOfNodeDepths(root):
    return getSumOfDepths(root, 0, 0)

def getSumOfDepths(node, sumOfDepths, depth):
    if node is None:
        return sumOfDepths
    sumOfDepths += depth * (depth + 1) / 2
    getSumOfDepths(node.left, sumOfDepths, depth + 1)
    getSumOfDepths(node.right, sumOfDepths, depth + 1)
    return sumOfDepths


# This is the class of the input binary tree.
class BinaryTree:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None

但是,我得到了 0 而不是正确的总和。

然后我尝试将它存储在一个列表中,然后将其传递下来:

def allKindsOfNodeDepths(root):
    return getSumOfDepths(root, [], 0)

def getSumOfDepths(node, depthsList, depth):
    if node is None:
        return
    depthsList.append(depth * (depth + 1) / 2)
    getSumOfDepths(node.left, depthsList, depth + 1)
    getSumOfDepths(node.right, depthsList, depth + 1)
    return sum(depthsList)


# This is the class of the input binary tree.
class BinaryTree:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None

只是想知道为什么第一个不起作用,而第二个却通过了?我猜是因为函数的范围,以及列表的不可变特性......但仍然无法对此提出明确的想法。

标签: pythonrecursionscopebinary-tree

解决方案


推荐阅读