Sum of all nodes of a Binary Tree(二叉树的所有节点之和)
本文介绍了二叉树的所有节点之和的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试编写一个程序来计算由列表列表表示的二叉树(不是二叉树)中所有节点(包括根)的总和。从概念上讲,我理解递归方式是最好的方式,但就是无法弄清楚代码。到目前为止,我的代码是:
class BinaryTree:
def __init__(self,rootObj, leftChild = None, rightChild = None):
self.key = rootObj
self.leftChild = None
self.rightChild = None
self.node=[rootObj, leftChild, rightChild]
def getrightChild(self):
return self.rightChild
def getleftChild(self):
return self.leftChild
def setRootObj(self,obj):
self.key = obj
def getRootObj(self):
return self.key
def sumTree(BinaryTree):
if BinaryTree is None: return 0
return sumTree(BinaryTree.leftChild)
+ sumTree(BinaryTree.rightChild)
+ BinaryTree.rootObj
print(sumTree([8,[],[]]))
print(sumTree([9, [6, [ ], [ ]], [65, [ ], [ ]]]))
推荐答案
从我从这段代码中读取的信息来看,您的递归算法是正确的。 但是,其中存在许多语法错误和其他语义错误,导致无法正确运行。
我看到的是:
- 您创建了
BinaryTree
类,但从未创建过它的实例。 会尝试计算列表总和,但这不会起作用,因为您希望它对对象进行求和。您需要首先解析该列表并创建BinaryTree
的实例。(如tree = BinaryTree(*write your list here*)
可能。当然,您需要使__init__()
方法允许传递列表。参见下一点。) - 您的
__init__()
方法将BinaryTree
对象作为参数,因此不会分析您的列表。 - 在
__init__()
方法中,您将两个子节点都设置为None
,因此任何节点都不会有子节点。 - 调用
sumTree()
方法时,需要指定上下文。 它必须是BinaryTree.sumTree(..)
。不过,您仍然需要创建应该传递给sumTree
方法的二叉树实例。 - 在
sumTree()
方法中,您尝试访问不存在的rootObj
成员,因为您将其称为key
。
除了错误之外,如果您愿意,我还想指出一些"代码气味"。
- 您应该将
sumTree()
方法的参数重命名为与类名不同的名称。 - 在python中,不需要getter-method。您可以直接访问成员。如果您仍然希望定义更复杂的get/set行为,您应该了解一下python属性。
- 成员
node
从未使用过。
这篇关于二叉树的所有节点之和的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:二叉树的所有节点之和
基础教程推荐
猜你喜欢
- 使 Python 脚本在 Windows 上运行而不指定“.py";延期 2022-01-01
- 症状类型错误:无法确定关系的真值 2022-01-01
- Python 的 List 是如何实现的? 2022-01-01
- 合并具有多索引的两个数据帧 2022-01-01
- 哪些 Python 包提供独立的事件系统? 2022-01-01
- 将 YAML 文件转换为 python dict 2022-01-01
- 如何在Python中绘制多元函数? 2022-01-01
- 使用Python匹配Stata加权xtil命令的确定方法? 2022-01-01
- 如何在 Python 中检测文件是否为二进制(非文本)文 2022-01-01
- 使用 Google App Engine (Python) 将文件上传到 Google Cloud Storage 2022-01-01