使用节点查找二叉树中的叶子总和

时间:2017-03-08 14:53:17

标签: python-3.x binary-tree

我希望能够通过使用节点递归地找到二叉树中所有叶子的总和,到目前为止我有:

class BTNode:
  """A node in a binary tree."""

  def __init__(self: 'BTNode', item: object, 
               left: 'BTNode' =None, right: 'BTNode' =None) -> None:
    """Initialize this node.
    """
    self.item, self.left, self.right = item, left, right

  def __repr__(self):
    return 'BTNode({}, {}, {})'.format(repr(self.item), 
                    repr(self.left), repr(self.right))

  def is_leaf(self: 'BTNode') -> bool:
    return not self.left and not self.right


def tree_sum(t: BTNode) -> int:
  '''Return the sum of the leaves in t.

  >>> t = BTNode(None, BTNode(8), BTNode(9))
  >>> tree_sum(t)
  17
  '''
  sm = 0
  t1 = t.left.item
  t2 = t.right.item
  if not t.left or not t.right:
    return 0
  if t.left.is_leaf() and t.right.is_leaf():
    sm = t1 + t2 + tree_sum(t.left) + tree_sum(t.right)
  return sm

函数tree_sum(t)我没有用,我很难找到一种有效的方法。我做错了什么?

1 个答案:

答案 0 :(得分:0)

你遗漏了一小部分代码。

由于t.leftt.right None如果t是一片树叶,行t1 = t.left.itemt2 = t.right.item会引发AttributeError 1}}。

您需要考虑到这一点:

t1 = t.left.item if t.left else None
t2 = t.right.item if t.right else None

然后

t = BTNode(None, BTNode(8), BTNode(9))
print(tree_sum(t))

产生正确的结果(17)。

那说,这个函数将返回所有叶子的总和(即在多级树的情况下它不会遍历整个树) )。