请编写函数,求二叉树的结点个数。 函数原型 int BinTreeNumNode(const TNODE *root); 说明:root 为二叉树的根指针,函数值为二叉树的结点数。 在“BinTree.h”中声明函数,在“BinTree.c”中实现函数。 BinTree.h ...... int BinTreeNumNode(const TNODE *root); ...... BinTree.c ...... /* 你提交的代码将被嵌在这里 */ 打开“main.c”,修改主函数对以上函数进行测试。 main.c #include <stdio.h> #include "BinTree.h" int main() { TNODE *r; BinTreeCreate(&r); BinTreeInput(&r); printf("%d\n", BinTreeNumNode(r)); BinTreeDestroy(&r); return 0; } 题图.jpg 输入样例 EIBJ##H###DF#A##G#C## 输出样例 10
时间: 2024-02-07 15:04:15 浏览: 76
C语言 求一个二叉树中位于先序序列中第k个位置的结点的值.doc.doc
下面是 BinTree.h 和 BinTree.c 文件的代码实现:
BinTree.h
```
#ifndef BINTREE_H
#define BINTREE_H
typedef struct tnode {
char data;
struct tnode *left;
struct tnode *right;
} TNODE;
void BinTreeCreate(TNODE **root);
void BinTreeDestroy(TNODE **root);
void BinTreeInput(TNODE **root);
void BinTreeOutput(const TNODE *root);
int BinTreeDepth(const TNODE *root);
int BinTreeNumNode(const TNODE *root);
#endif /* BINTREE_H */
```
BinTree.c
```
#include <stdio.h>
#include <stdlib.h>
#include "BinTree.h"
void BinTreeCreate(TNODE **root) {
char ch;
scanf("%c", &ch);
if (ch == '#') {
*root = NULL;
} else {
*root = (TNODE *)malloc(sizeof(TNODE));
(*root)->data = ch;
BinTreeCreate(&((*root)->left));
BinTreeCreate(&((*root)->right));
}
}
void BinTreeDestroy(TNODE **root) {
if (*root != NULL) {
BinTreeDestroy(&((*root)->left));
BinTreeDestroy(&((*root)->right));
free(*root);
*root = NULL;
}
}
void BinTreeInput(TNODE **root) {
getchar(); /* 吞掉回车字符 */
BinTreeCreate(root);
}
void BinTreeOutput(const TNODE *root) {
if (root != NULL) {
printf("%c", root->data);
if (root->left != NULL || root->right != NULL) {
printf("(");
BinTreeOutput(root->left);
if (root->right != NULL) {
printf(",");
}
BinTreeOutput(root->right);
printf(")");
}
}
}
int BinTreeDepth(const TNODE *root) {
int left_depth, right_depth;
if (root == NULL) {
return 0;
} else {
left_depth = BinTreeDepth(root->left);
right_depth = BinTreeDepth(root->right);
return (left_depth > right_depth) ? (left_depth + 1) : (right_depth + 1);
}
}
int BinTreeNumNode(const TNODE *root) {
if (root == NULL) {
return 0;
} else {
return BinTreeNumNode(root->left) + BinTreeNumNode(root->right) + 1;
}
}
```
在 main.c 文件中添加以下代码:
```
#include <stdio.h>
#include "BinTree.h"
int main() {
TNODE *r;
BinTreeCreate(&r);
BinTreeInput(&r);
printf("%d\n", BinTreeNumNode(r));
BinTreeDestroy(&r);
return 0;
}
```
编译运行程序,输入样例 EIBJ##H###DF#A##G#C##,输出结果为 10,符合题目要求。
阅读全文