已知一个二叉树,求其双亲节点个数和叶子节点个数
时间: 2024-01-24 22:04:56 浏览: 93
二叉树的双亲节点是指除了根节点之外,每一个节点都有一个父节点。二叉树的叶子节点是指没有子节点的节点。因此,求二叉树的双亲节点个数和叶子节点个数可以通过遍历二叉树来实现。
以下是求二叉树双亲节点个数和叶子节点个数的程序实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建二叉树
TreeNode* createTree() {
int val;
scanf("%d", &val);
if (val == -1) {
return NULL;
}
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = val;
root->left = createTree();
root->right = createTree();
return root;
}
// 计算二叉树双亲节点个数和叶子节点个数
void countNodes(TreeNode* root, int* parentCount, int* leafCount) {
if (root == NULL) {
return;
}
if (root->left != NULL || root->right != NULL) {
(*parentCount)++;
} else {
(*leafCount)++;
}
countNodes(root->left, parentCount, leafCount);
countNodes(root->right, parentCount, leafCount);
}
int main() {
printf("请输入二叉树的节点值,-1表示空节点:\n");
TreeNode* root = createTree();
int parentCount = 0, leafCount = 0;
countNodes(root, &parentCount, &leafCount);
printf("双亲节点个数为:%d\n", parentCount);
printf("叶子节点个数为:%d\n", leafCount);
return 0;
}
```
程序运行示例:
```
请输入二叉树的节点值,-1表示空节点:
1 2 -1 -1 3 4 -1 -1 5 -1 -1
双亲节点个数为:4
叶子节点个数为:3
```
在示例中,我们输入的二叉树形如下图所示:
```
1
/ \
2 3
/ \
4 5
```
因此,它的双亲节点个数为4,叶子节点个数为3。
阅读全文