Python:计算树的节点数

Python:计算树的节点数,python,Python,实际上,我正在编写一个返回树大小的方法: def size(self): count = 0 hasLeft, hasRight = self.left is not None, self.right is not None if hasLeft: count += self.left.size() if hasRight: count += self.right.size() if (hasLeft or hasRight

实际上,我正在编写一个返回树大小的方法:

def size(self):
    count = 0
    hasLeft, hasRight = self.left is not None, self.right is not None
    if hasLeft:
        count += self.left.size()
    if hasRight:
        count += self.right.size()
    if (hasLeft or hasRight) and self.root_value is not None:
        count += 1
    return count
该方法有效,但仅适用于内部节点:( 我相信一定有一个非常简单的解决方案来获得树的大小…但是如何呢? 例子: 如果我打电话:

tree=Tree_Class(2,Tree_Class(1,Tree_Class(3),Tree_Class(20)),Tree_Class(13,Tree_Class(33),Tree_Class(39)))
tree.size()
所需输出为:7


感谢您的帮助!

问题在于您的语句
如果(hasleet或haslright)和self.root\u值不是None:
--此检查错误,只有当节点不是叶时才是
+=1
。调用
size
时,此节点必须有效(根据您的逻辑),因此
计数
应始终
+=1

更简单的代码如下所示

class Tree_Class:
    def __init__(self, t, left=None, right=None):
        self.root_value = t
        self.left = left
        self.right = right

    def size(self):
        count = 1
        if self.left:
            count += self.left.size()
        if self.right:
            count += self.right.size()
        return count
结果是:

>>> tree=Tree_Class(2,Tree_Class(1,Tree_Class(3),Tree_Class(20)),Tree_Class(13,Tree_Class(33),Tree_Class(39)))
>>> tree.size()
7

我想你也应该在你的问题中添加
Tree\u类的代码。你的观察是正确的。非常感谢……我真的没有看到错误。