python - 总结二叉树中的节点深度
问题描述
为了总结任何给定二叉树中所有节点的深度,我编写了以下递归算法:
def nodeDepths(root):
final=0
helper(root,0,final)
return final
def helper(node,d,final):
if not node:
return
final+=d
helper(node.left,d+1,final)
helper(node.right,d+1,final)
class BinaryTree:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
我的想法是:当我看到每个节点时,将该节点的深度添加到最终总和中,然后递归调用左右,以便它们可以做同样的事情。在递归调用堆栈的末尾,最终总和应该具有正确的值。
实际结果:最终总和始终为 0。
为什么这不起作用?
解决方案
Python 通过assignment传递它的参数。因此,如果将列表而不是变量传递给上面的方法,它将像这里一样工作:
def nodeDepths(root):
final=[0]
helper(root,0,final)
return final[0]
def helper(node,d,final):
if not node:
return
final[0]+=d
helper(node.left,d+1,final)
helper(node.right,d+1,final)
简单来说,
- 如果传入一个可变对象,则可以对其进行更改,但如果将其分配给,则外部变量将不会反映更改。
- 如果传入不可变对象,则无法更改,并且外部变量不会反映更改。
推荐阅读
- json - 如何
从powershell中的JSON输出中删除和空格 - node.js - NodeJs:大写字符串
- r - 从 netcdf 中提取特定 lat long 的值
- r - 添加有条件的行
- javascript - React 如何获取 props.chidren 组件的宽度和高度?
- python - 有没有办法在不使用任何模块的情况下在 python 中求解两个线性方程?
- jquery - XHR 加载失败:移动浏览器
- graphql - GraphQL 请求不存在且没有错误的字段
- java - Java WebService 错误:XMLSignatureException - 发现不支持的签名算法
- list - 在不使用列表的情况下在 groovy 中归档地图