二叉树采用二叉链表存储数据,请分别用递归和非递归方法编写算法求二叉树的叶子结点的个数
时间: 2024-10-21 09:15:32 浏览: 33
头歌数据结构二叉树的二叉链表存储及基本操作
5星 · 资源好评率100%
二叉树的叶子节点是指没有子节点的节点。我们可以使用递归和迭代两种方法来遍历二叉树并计算叶子节点的数量。
**递归方法**(Python示例):
```python
def count_leaves_rec(node):
if node is None:
return 0
else:
# 如果当前节点是叶子节点,则计数加一;否则,递归计算左子树和右子树的叶子节点数
if not node.left and not node.right:
return 1
else:
return count_leaves_rec(node.left) + count_leaves_rec(node.right)
```
调用函数`count_leaves_rec(root)`,其中`root`是二叉树的根节点。
**非递归方法**(使用栈实现):
```python
def count_leaves_iter(root):
if root is None:
return 0
stack = [root]
leaf_count = 0
while stack:
node = stack.pop()
# 检查当前节点是否是叶子节点
if not node.left and not node.right:
leaf_count += 1
# 将子节点入栈,继续检查
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
return leaf_count
```
这个方法使用一个栈来保存待处理的节点,直到栈为空,所有叶子节点都已访问过。
阅读全文