C语言实现二叉树:前序建立、遍历及叶子节点统计
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
// 创建新的节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf('Memory allocation failed!\n');
exit(1);
}
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 创建示例二叉树
Node* createTree() {
Node* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
return root;
}
// 前序遍历
void preorderTraversal(Node* root) {
if (root == NULL) {
return;
}
printf('%d ', root->data);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
// 中序遍历
void inorderTraversal(Node* root) {
if (root == NULL) {
return;
}
inorderTraversal(root->left);
printf('%d ', root->data);
inorderTraversal(root->right);
}
// 后序遍历
void postorderTraversal(Node* root) {
if (root == NULL) {
return;
}
postorderTraversal(root->left);
postorderTraversal(root->right);
printf('%d ', root->data);
}
// 统计叶子节点个数
int countLeaves(Node* root) {
if (root == NULL) {
return 0;
}
if (root->left == NULL && root->right == NULL) {
return 1;
}
return countLeaves(root->left) + countLeaves(root->right);
}
int main() {
Node* root = createTree();
printf('前序遍历: ');
preorderTraversal(root);
printf('\n');
printf('中序遍历: ');
inorderTraversal(root);
printf('\n');
printf('后序遍历: ');
postorderTraversal(root);
printf('\n');
printf('叶子节点个数: %d\n', countLeaves(root));
return 0;
}
原文地址: http://www.cveoy.top/t/topic/f3yr 著作权归作者所有。请勿转载和采集!