XDOJ统计二叉树的叶子结点
时间: 2024-12-26 09:27:18 浏览: 0
### 统计二叉树叶子结点的算法实现
#### 问题描述
给定一棵二叉树,目标是计算并返回这棵树中所有的叶子结点数量。
#### 解决方案概述
为了完成这一任务,可以采用递归方法遍历整个二叉树。每当遇到一个既无左子也无右子的孩子节点时,则认为找到了一片叶子,并增加计数器。此过程可以通过前序、中序或后序遍历来达成,在这里推荐使用先根遍历(即前序),因为它更直观地反映了从顶部到底部逐层处理的思想[^1]。
#### Python代码示例
下面是利用Python编写的函数`countLeaves()`用于统计任意给定二叉树内的叶节数量:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def countLeaves(root: TreeNode) -> int:
# 如果当前节点为空,则返回零作为基础情况
if root is None:
return 0
# 若当前节点没有左右孩子,则它是一个叶子节点
elif not root.left and not root.right:
return 1
else:
# 否则继续探索其左右分支并将它们的结果相加
return countLeaves(root.left) + countLeaves(root.right)
# 测试用例构建简单的二叉树结构
if __name__ == "__main__":
tree = TreeNode(1,
TreeNode(2),
TreeNode(3,
TreeNode(4),
TreeNode(5)))
print(f"Number of leaves in the binary tree: {countLeaves(tree)}") # 输出应为:3
```
上述程序定义了一个名为TreeNode的类来表示单个节点的数据成员以及指向两个可能存在的孩子的指针。核心逻辑封装在一个叫做`countLeaves()` 的辅助函数里,通过判断传入参数是否满足终止条件来进行递归调用直到触及底部为止。
对于XDOJ平台上的实际提交版本,通常还需要考虑如何读取输入数据建立对应的二叉树实例化对象,这部分工作可以根据具体的题目说明调整初始化部分即可[^3]。
阅读全文