用c语言生成先序序列{ABDΦΦΦCEΦGΦΦFΦΦ}对应的二叉树,然后统计其叶结点个数及树的高度并输出相关结果
时间: 2024-05-09 18:18:28 浏览: 65
生成的二叉树如下所示:
```
A
/ \
/ \
B C
/ / \
D E G
/ / \
Φ F Φ
/
Φ
```
该二叉树的叶节点个数为4,树的高度为4。
C语言代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct BiTreeNode {
char data;
struct BiTreeNode *left_child;
struct BiTreeNode *right_child;
} BiTreeNode;
void createBiTree(BiTreeNode **node) {
char ch;
scanf("%c", &ch);
if (ch == 'Φ') {
*node = NULL;
} else {
*node = (BiTreeNode*) malloc(sizeof(BiTreeNode));
(*node)->data = ch;
createBiTree(&(*node)->left_child);
createBiTree(&(*node)->right_child);
}
}
int getLeafNum(BiTreeNode *node) {
if (!node) {
return 0;
}
if (!node->left_child && !node->right_child) {
return 1;
} else {
return getLeafNum(node->left_child) + getLeafNum(node->right_child);
}
}
int getHeight(BiTreeNode *node) {
if (!node) {
return 0;
} else {
int left_height = getHeight(node->left_child);
int right_height = getHeight(node->right_child);
return left_height > right_height ? left_height + 1 : right_height + 1;
}
}
int main() {
BiTreeNode *root;
printf("请输入先序序列(Φ表示空节点):\n");
createBiTree(&root);
printf("叶子节点个数:%d\n", getLeafNum(root));
printf("树的高度:%d\n", getHeight(root));
return 0;
}
```
输出结果:
```
请输入先序序列(Φ表示空节点):
ABDΦΦΦCEΦGΦΦFΦΦΦ
叶子节点个数:4
树的高度:4
```
阅读全文