python - 二叉树递归参数未更新
问题描述
我正在尝试编写一个函数返回所有二叉树的子树节点深度的总和。这是我的第一次尝试,我尝试将深度总和存储在“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
只是想知道为什么第一个不起作用,而第二个却通过了?我猜是因为函数的范围,以及列表的不可变特性......但仍然无法对此提出明确的想法。
解决方案
推荐阅读
- java - 为什么子方法在主方法中找不到符号?
- php - 无法接收从 Vue 通过 axios 发送到 PHP 的 Post 数据
- vb.net - 将未过滤的文本放入文本框中
- sharepoint - 如何根据文件名获取文档库中新上传文件的ID?PNP JS
- node.js - 如何将字符串添加到集合中的数组 | MongoDB | 节点JS
- algorithm - 查找单链表的第 k 个最后一个元素:答案解释
- javascript - 与 JavaScript 中的变量赋值一样,一次性为一个对象分配多个值
- webgl - 动态收缩缓冲区
- html - 如果 Markdown 是 HTML 的超集,那为什么它不能做 HTML 能做的所有事情呢?
- tensorflow - 将预训练模型生成的预测输出解码为人类可读的标签