统计二叉树中只有左孩子的结点个数c语言
时间: 2023-11-14 12:07:15 浏览: 38
以下是统计二叉树中只有左孩子的结点个数的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结点结构体定义
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 统计二叉树中只有左孩子的结点个数
int countNodesWithOnlyLeftChild(TreeNode* root) {
if (!root) {
return 0;
}
int count = 0;
if (root->left && !root->right) {
count = 1;
}
return count + countNodesWithOnlyLeftChild(root->left) + countNodesWithOnlyLeftChild(root->right);
}
int main() {
// 构造一个二叉树
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = 1;
root->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->val = 2;
root->left->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->left->val = 3;
root->left->right = NULL;
root->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->val = 4;
root->right->left = NULL;
root->right->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->right->val = 5;
// 统计只有左孩子的节点个数
int count = countNodesWithOnlyLeftChild(root);
printf("二叉树中只有左孩子的结点个数为:%d\n", count);
// 释放内存
free(root->left->left);
free(root->left);
free(root->right->right);
free(root->right);
free(root);
return 0;
}
```
以上代码中,我们使用递归方式遍历二叉树,在每个结点处判断其是否只有左孩子,如果是则计数器加1,最终返回计数器的值。在main函数中,我们构造一个二叉树并调用函数进行统计,最后释放内存。