用C语言设计一个算法,求二叉树第k层的结点个数的代码
时间: 2024-03-19 15:46:17 浏览: 72
以下是使用C语言实现求二叉树第k层结点个数的算法实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点类型
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 求二叉树第k层的结点个数
int get_node_num_k(TreeNode* root, int k) {
if (root == NULL || k <= 0) {
return 0;
}
if (k == 1) {
return 1;
} else {
return get_node_num_k(root->left, k - 1) + get_node_num_k(root->right, k - 1);
}
}
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 = 4;
root->left->right = NULL;
root->right = (TreeNode*) malloc(sizeof(TreeNode));
root->right->val = 3;
root->right->left = NULL;
root->right->right = (TreeNode*) malloc(sizeof(TreeNode));
root->right->right->val = 5;
root->right->right->left = NULL;
root->right->right->right = NULL;
// 求第2层的结点个数
int k = 2;
int count = get_node_num_k(root, k);
printf("The number of nodes in level %d is %d.\n", k, count);
// 释放内存
free(root->left->left);
free(root->left);
free(root->right->right);
free(root->right);
free(root);
return 0;
}
```
其中,`root`表示二叉树的根节点,`k`表示要求的层数。如果`root`为空或者`k`小于等于0,则返回0;如果`k`等于1,则返回1;否则递归求解左子树和右子树的第`k-1`层结点个数,然后将左右子树的结果相加即为第`k`层的结点个数。
阅读全文