"
为了计算给定二叉树中叶子结点的总数,可以使用递归算法。以下是一种可能的实现方式:
```
def count_leaves(node):
if node is None:
return 0
else:
left_count = count_leaves(node.left)
right_count = count_leaves(node.right)
if node.left is None and node.right is None:
return 1
else:
return left_count + right_count
```
该算法的基本思路是,对于每个节点,递归计算其左子树和右子树中叶子结点的数量,然后将左右子树的数量加起来,如果当前节点是一个叶子节点,则将结果加1。
算法的时间复杂度为O(n),其中n是二叉树的节点数。这是因为对于每个节点,算法都要递归计算其左右子树中叶子结点的数量,因此算法的深度为O(n)。在计算过程中,每个节点最多被访问一次,因此算法的宽度为O(n)。因此,算法的时间复杂度为O(n)。
算法的空间复杂度为O(h),其中h是二叉树的高度。这是因为算法在递归计算左右子树中叶子结点的数量时,需要使用栈来保存当前节点的左右子节点,因此算法的空间复杂度与二叉树的高度成正比。"