#include <stdio.h>
#include <stdlib.h>
// 二叉树节点结构体
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建一个新的二叉树节点
TreeNode* createNode(int data) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
if (newNode == NULL) {
printf("内存分配失败!\n");
exit(1);
}
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 计算二叉树的高度
int treeHeight(TreeNode* root) {
if (root == NULL)
return 0;
else {
int leftHeight = treeHeight(root->left);
int rightHeight = treeHeight(root->right);
return (leftHeight > rightHeight) ? (leftHeight + 1) : (rightHeight + 1);
}
}
// 统计二叉树的叶子节点数
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 main() {
// 构建一棵二叉树
TreeNode* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
root->right->left = createNode(6);
root->right->right = createNode(7);
// 求二叉树的高度
int height = treeHeight(root);
printf("二叉树的高度为:%d\n", height);
// 统计二叉树的叶子节点数
int leafCount = countLeaves(root);
printf("二叉树的叶子节点数为:%d\n", leafCount);
return 0;
}