python - 二叉树叶子值的总和
问题描述
我写了这段代码,当我使用 print 时,我看到我得到了叶子。但是,函数的最终返回值是None
叶子的总和,而不是叶子的总和,这应该是7
在这个例子中。我很高兴知道这里出了什么问题。谢谢 !
class Node:
def __init__(self, val=None):
self.left = None
self.right = None
self.val = val
def sum_leafs(tree):
if tree is None:
return 0
if tree.right and tree.left:
sum_leafs(tree.right)
sum_leafs(tree.left)
elif tree.right or tree.left:
if tree.right:
sum_leafs(tree.right)
elif tree.left:
sum_leafs(tree.left)
elif tree.right is None and tree.left is None:
return sum_leafs(tree.left) + 1
node = Node(10)
node.right = Node(2)
node.left = Node(11)
node.left.right = Node(5)
print(sum_leafs(node))
解决方案
当您对分支(左/右)求和时忘记添加+
,并且您忘记了访问val
哪个是整个工作最关键的事情。
此外,逻辑可以简化:
def sum_leafs(tree):
if tree is None:
return 0
if not tree.right and not tree.left:
return tree.val
return sum_leafs(tree.right) + sum_leafs(tree.left)
推荐阅读
- amazon-s3 - 在 athena aws 中具有不同分区的表
- ios - 核心数据添加新列而不重建索引
- javascript - 只为其他一些 IIFES 创建一个 IIFE 返回变量
- ios - 自定义特定标签栏
- oracle - PL/SQL 试图执行一个非常简单的过程
- node.js - 在现有的 heroku 应用程序上部署节点应用程序
- python - 使用用户定义的布尔值设置 Python 正则表达式标志的最佳方法
- mongodb - 基于 MongoDb ObjectId 的 Redis 基于游标的分页
- gradle - 通过 build.gradle 任务在项目目录中创建 version.txt 文件(gradle 5.0)
- python-2.7 - 在 Python 中清除 Pickle `memo`