给你一个二叉树,请你求出该二叉树的叶子结点数量。二叉树的输入形式见下面的提示。 输入 第一行为n,表示二叉树的数组长度1≤n≤100;第二行为树的数组形式,当tree[i] = 0时,表示为空结点。 输出 二叉树的叶子结点数量。 样例输入 Copy 7 3 9 20 0 0 15 7 样例输出 Copy 3c++完整代码
时间: 2024-02-17 19:01:21 浏览: 71
以下是给出一个二叉树,求叶子节点数量的 C++ 代码实现:
```c++
#include <iostream>
#include <vector>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
int count_leaf_nodes(TreeNode* root) {
if (root == nullptr) {
return 0;
}
if (root->left == nullptr && root->right == nullptr) {
return 1;
}
return count_leaf_nodes(root->left) + count_leaf_nodes(root->right);
}
int main() {
int n;
cin >> n;
vector<int> arr(n);
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
// 构建二叉树
vector<TreeNode*> nodes(n);
for (int i = 0; i < n; i++) {
if (arr[i] != 0) {
nodes[i] = new TreeNode(arr[i]);
}
}
for (int i = 0; i < n; i++) {
if (nodes[i] != nullptr) {
if (2 * i + 1 < n) {
nodes[i]->left = nodes[2 * i + 1];
}
if (2 * i + 2 < n) {
nodes[i]->right = nodes[2 * i + 2];
}
}
}
int count = count_leaf_nodes(nodes[0]);
cout << count << endl;
return 0;
}
```
这个程序中,首先读入二叉树的数组表示形式,然后根据数组构建二叉树。构建二叉树的方法是,先创建一个大小为 n 的 TreeNode 指针数组 nodes,将数组中非零元素对应的节点创建出来,然后再根据节点的下标关系将它们连接起来。
构建好二叉树后,调用 `count_leaf_nodes` 函数计算叶子节点的数量。函数的实现是递归的,如果当前节点为空指针,则返回 0;如果当前节点的左右子节点均为空,则当前节点为叶子节点,返回 1;否则递归计算左子树和右子树的叶子节点个数之和。
注意,这里假设二叉树的根节点总是在数组的第一个位置。如果根节点不在第一个位置,需要修改代码。
阅读全文