请用C++写算法设计题:二叉树采用二叉链表存储结构,请分别用递归和非递归方法编写算法求二叉树的叶子结点的个数。
时间: 2024-10-23 20:17:09 浏览: 60
erchashubianli.rar_用二叉链表 进行 二叉树 遍历
在C++中,我们可以使用递归和非递归方法来计算二叉树的叶子节点个数。以下是两个实现:
**1. 递归方法:**
```cpp
#include <iostream>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
int countLeavesRec(TreeNode* root) {
// 如果根节点为空,返回0
if (root == NULL) return 0;
// 如果根节点既是左孩子的也是右孩子的,说明它是叶节点
if (root->left == NULL && root->right == NULL) return 1;
// 否则,递归地计算左子树和右子树的叶节点数并相加
return countLeavesRec(root->left) + countLeavesRec(root->right);
}
```
**2. 非递归方法(迭代):**
```cpp
int countLeavesNonRec(TreeNode* root) {
int count = 0;
stack<TreeNode*> s;
s.push(root);
while (!s.empty()) {
TreeNode* node = s.top();
s.pop();
// 检查是否到达叶子节点
if (node->left == NULL && node->right == NULL) {
count++;
}
// 将未访问的子节点压入栈中
if (node->left != NULL) s.push(node->left);
if (node->right != NULL) s.push(node->right);
}
return count;
}
```
阅读全文