6、定义一个输出叶子结点的元素并计算叶子结点个数的函数 Leaf 1.判断二叉树是否为空 2.判断左子树和右子树是否为空 (1)如果为空,叶子结点数+1,并且用数组保留叶子结点的元素 (2)如果不为空,递归使用Leaf函数遍历左子树和右子树 用c语言
时间: 2024-12-24 22:40:00 浏览: 6
在C语言中,你可以创建一个名为`Leaf`的函数来计算二叉树的叶子节点数并输出这些节点的元素。下面是实现这个功能的基本步骤:
1. 定义二叉树节点结构体(假设为`TreeNode`),包括一个整数值`val`和两个指向左右子节点的指针`left`和`right`。
```c
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
```
2. 创建一个`Leaf`函数,接收一个`TreeNode`类型的参数`root`,表示当前节点。该函数会判断当前节点是否为空,以及其左右子树是否为空。
```c
int countLeaves(TreeNode* root, int* leafArray, int leafCount) {
if (root == NULL) { // 判断根节点是否为空
return 0;
}
if (root->left == NULL && root->right == NULL) { // 如果是叶子节点
leafArray[leafCount] = root->val; // 保存叶子节点值
leafCount++; // 叶子节点计数加1
} else {
countLeaves(root->left, leafArray, leafCount); // 递归遍历左子树
countLeaves(root->right, leafArray, leafCount); // 递归遍历右子树
}
return leafCount;
}
```
3. 主函数中调用`Leaf`函数,初始化叶子节点数组和计数器,然后输出叶子节点及其数量。
```c
int main() {
TreeNode* root = ... // 填充二叉树根节点
int leafArray[MAX_LEAFS]; // 初始化一个大小适中的数组存储叶子节点
int leafCount = countLeaves(root, leafArray, 0);
printf("叶节点个数: %d\n", leafCount); // 输出叶子节点总数
for (int i = 0; i < leafCount; i++) {
printf("叶节点值: %d\n", leafArray[i]); // 输出每个叶子节点的值
}
return 0;
}
```
阅读全文