#include <stdio.h>
#include <stdlib.h>
// 二叉树结点的定义
typedef struct TreeNode {
char data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建新的二叉树结点
TreeNode* createNode(char data) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 计算二叉树节点总数的算法
int countNodes(TreeNode* root) {
if (root == NULL) {
return 0;
} else {
return 1 + countNodes(root->left) + countNodes(root->right);
}
}
// 计算二叉树叶子总数的算法
int countLeaves(TreeNode* root) {
if (root == NULL) {
return 0;
} else if (root->left == NULL && root->right == NULL) {
return 1;
} else {
return countLeaves(root->left) + countLeaves(root->right);
}
}
// 计算二叉树的高度的算法
int getHeight(TreeNode* root) {
if (root == NULL) {
return 0;
} else {
int leftHeight = getHeight(root->left);
int rightHeight = getHeight(root->right);
return (leftHeight > rightHeight) ? (leftHeight + 1) : (rightHeight + 1);
}
}
// 中序遍历二叉树并输出序列
void inorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
inorderTraversal(root->left);
printf("%c ", root->data);
inorderTraversal(root->right);
}
int main() {
// 创建二叉树
TreeNode* root = createNode('A');
root->left = createNode('B');
root->right = createNode('C');
root->left->left = createNode('D');
root->left->right = createNode('E');
root->right->left = createNode('F');
root->right->right = createNode('G');
// 计算二叉树节点总数
int nodeCount = countNodes(root);
printf("二叉树节点总数: %d\n", nodeCount);
// 计算二叉树叶子总数
int leafCount = countLeaves(root);
printf("二叉树叶子总数: %d\n", leafCount);
// 计算二叉树的高度
int height = getHeight(root);
printf("二叉树的高度: %d\n", height);
// 输出中序遍历序列
printf("中序遍历序列: ");
inorderTraversal(root);
printf("\n");
return 0;
}