C语言统计二叉树的叶子总数
时间: 2024-08-13 16:06:45 浏览: 50
在C语言中,统计二叉树的叶子节点总数通常涉及到深度优先搜索(Depth-First Search, DFS)算法,特别是后序遍历(Postorder Traversal),因为后序遍历在访问到叶子节点时,已经遍历过了它的左子树和右子树,所以可以直接计数。
以下是一个简单的C语言函数示例,用于计算二叉树的叶子节点数:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 后序遍历(递归)统计叶子节点数
int countLeaves(TreeNode* root) {
if (root == NULL) {
return 0; // 空节点或叶节点,返回0
} else if (root->left == NULL && root->right == NULL) {
return 1; // 叶节点,返回1
} else {
// 非叶节点,继续遍历其左右子树
return countLeaves(root->left) + countLeaves(root->right);
}
}
int main() {
// 创建一个简单的二叉树实例
TreeNode* root = malloc(sizeof(TreeNode));
root->val = 1;
root->left = malloc(sizeof(TreeNode));
root->left->val = 2;
root->left->left = NULL;
root->left->right = NULL;
root->right = malloc(sizeof(TreeNode));
root->right->val = 3;
root->right->left = malloc(sizeof(TreeNode));
root->right->left->val = 4;
root->right->left->left = NULL;
root->right->left->right = NULL;
root->right->right = NULL;
// 计算并输出叶子节点数
int leafCount = countLeaves(root);
printf("The tree has %d leaf nodes.\n", leafCount);
free(root); // 释放内存
return 0;
}
```
在这个例子中,`countLeaves`函数会递归地检查每个节点,如果节点没有左右子节点,则认为它是叶子节点,并增加计数。
阅读全文