#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;
}
C语言实现二叉树:前序建立、遍历及叶子节点统计

原文地址: http://www.cveoy.top/t/topic/f3yr 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录