说明:root 为二叉树的根指针,函数值为二叉树的结点数。 在“BinTree.h”中声明函数,在“BinTree.c”中实现函数。 BinTree.h
时间: 2024-02-20 21:56:29 浏览: 107
求二叉树上结点的路径 代码 及说明
4星 · 用户满意度95%
在 "BinTree.h" 中声明 `BinTreeNumNode` 函数,可以像下面这样写:
```c
#ifndef BINTREE_H
#define BINTREE_H
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
int BinTreeNumNode(const TreeNode* root);
#endif /* BINTREE_H */
```
其中,`BinTreeNumNode` 函数的声明如下:
```c
int BinTreeNumNode(const TreeNode* root);
```
在 "BinTree.c" 中实现 `BinTreeNumNode` 函数,可以像下面这样写:
```c
#include "BinTree.h"
#include <stdlib.h>
int BinTreeNumNode(const TreeNode* root) {
if (root == NULL) {
return 0;
}
return 1 + BinTreeNumNode(root->left) + BinTreeNumNode(root->right);
}
// 创建一棵二叉树
TreeNode* create_tree() {
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = 1;
root->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->val = 2;
root->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->val = 3;
root->left->left = NULL;
root->left->right = NULL;
root->right->left = (TreeNode*)malloc(sizeof(TreeNode));
root->right->left->val = 4;
root->right->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->right->val = 5;
root->right->left->left = NULL;
root->right->left->right = NULL;
root->right->right->left = NULL;
root->right->right->right = NULL;
return root;
}
// 销毁一棵二叉树
void destroy_tree(TreeNode* root) {
if (root == NULL) {
return;
}
destroy_tree(root->left);
destroy_tree(root->right);
free(root);
}
```
其中,`BinTreeNumNode` 函数的实现和之前给出的一样。
另外,为了测试 `BinTreeNumNode` 函数,我们在 "BinTree.c" 中实现了创建一棵二叉树的函数 `create_tree` 和销毁一棵二叉树的函数 `destroy_tree`。
可以通过如下代码进行测试:
```c
#include "BinTree.h"
#include <stdio.h>
int main() {
// 构造一棵二叉树
TreeNode* root = create_tree();
// 计算结点个数
int num = BinTreeNumNode(root);
// 输出结果
printf("The number of nodes is: %d\n", num);
// 释放内存
destroy_tree(root);
return 0;
}
```
注意:在 "BinTree.c" 中引用了 "BinTree.h",因此需要通过编译器将 "BinTree.c" 和 "BinTree.h" 编译成一个可执行文件。
阅读全文