统计二叉树中值为偶数的结点数(递归C语言)
时间: 2024-09-08 11:01:46 浏览: 66
在C语言中,我们可以使用递归的方式来计算二叉树中值为偶数的节点数。这里是一个简单的递归函数的示例:
```c
#include <stdio.h>
#include <stdbool.h>
// 定义二叉树结构
typedef struct TreeNode {
int val; // 节点值
struct TreeNode* left; // 左子节点
struct TreeNode* right; // 右子节点
} TreeNode;
// 用于递归计算偶数值节点的辅助函数
int countEvenHelper(TreeNode* node, bool isVisited) {
if (node == NULL) return 0; // 如果节点为空,返回0
// 如果当前节点值为偶数,累加计数
if (node->val % 2 == 0) {
return 1 + countEvenHelper(node->left, false) + countEvenHelper(node->right, false);
}
// 如果已经访问过这个节点,说明是左子树或右子树的节点,直接跳过
if (isVisited) return 0;
// 递归处理左右子树,并标记当前节点已访问
return countEvenHelper(node->left, true) + countEvenHelper(node->right, true);
}
// 主函数,传入根节点开始计算
int countEvenNodes(TreeNode* root) {
return countEvenHelper(root, false);
}
int main() {
// 创建并初始化二叉树实例,此处省略实际构建过程
TreeNode* root = ...;
int evenCount = countEvenNodes(root);
printf("二叉树中值为偶数的节点数为:%d\n", evenCount);
return 0;
}
```
这个程序首先定义了一个二叉树结构`TreeNode`,然后提供了一个名为`countEvenHelper`的递归辅助函数,该函数会检查每个节点的值是否为偶数,如果是,则增加计数并继续遍历其子节点。主函数`countEvenNodes`则调用这个辅助函数从根节点开始。
阅读全文