#include <stdio.h> #include <stdlib.h> typedef struct TreeNode { char data; struct TreeNode *left; struct TreeNode *right; } TreeNode; TreeNode* createTree() { char ch; scanf("%c", &ch); if (ch == ' ') { return NULL; } TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode)); node->data = ch; node->left = createTree(); node->right = createTree(); return node; } int countLeaf(TreeNode *root) { if (root == NULL) { return 0; } if (root->left == NULL && root->right == NULL) { return 1; } return countLeaf(root->left) + countLeaf(root->right); } int getHeight(TreeNode *root) { if (root == NULL) { return 0; } int leftHeight = getHeight(root->left); int rightHeight = getHeight(root->right); return (leftHeight > rightHeight ? leftHeight : rightHeight) + 1; } int main() { printf("请输入先序序列:\n"); TreeNode *root = createTree(); printf("叶结点个数:%d\n", countLeaf(root)); printf("树的高度:%d\n", getHeight(root)); return 0;标一下注释
时间: 2024-01-27 08:05:13 浏览: 67
以下是对代码的注释:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义树的结点结构体
typedef struct TreeNode {
char data; // 数据域
struct TreeNode *left; // 左子树指针
struct TreeNode *right; // 右子树指针
} TreeNode;
// 创建树的函数,利用先序遍历的方式输入树的结点
TreeNode* createTree() {
char ch;
scanf("%c", &ch); // 读入字符
if (ch == ' ') { // 如果当前字符为空格,则返回 NULL
return NULL;
}
TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode)); // 创建树的结点
node->data = ch; // 将字符赋值给数据域
node->left = createTree(); // 递归创建左子树
node->right = createTree(); // 递归创建右子树
return node; // 返回树的结点指针
}
// 计算树的叶子结点个数的函数
int countLeaf(TreeNode *root) {
if (root == NULL) { // 如果当前结点为空,则返回 0
return 0;
}
if (root->left == NULL && root->right == NULL) { // 如果当前结点没有左右子树,则为叶子结点,返回 1
return 1;
}
return countLeaf(root->left) + countLeaf(root->right); // 递归计算左右子树的叶子结点个数并相加,返回结果
}
// 计算树的高度的函数
int getHeight(TreeNode *root) {
if (root == NULL) { // 如果当前结点为空,则返回 0
return 0;
}
int leftHeight = getHeight(root->left); // 计算左子树的高度
int rightHeight = getHeight(root->right); // 计算右子树的高度
return (leftHeight > rightHeight ? leftHeight : rightHeight) + 1; // 返回左右子树高度的较大值加1
}
int main() {
printf("请输入先序序列:\n");
TreeNode *root = createTree(); // 创建树
printf("叶结点个数:%d\n", countLeaf(root)); // 输出叶子结点个数
printf("树的高度:%d\n", getHeight(root)); // 输出树的高度
return 0;
}
```
阅读全文