#include <stdio.h>
#include <stdlib.h>

// 定义二叉树结点结构体
typedef struct TreeNode {
    int data;
    struct TreeNode* left;
    struct TreeNode* right;
} TreeNode;

// 前序建立二叉树
TreeNode* createTree() {
    int data;
    scanf('%d', &data);
    if (data == 0) {
        return NULL;
    } else {
        TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
        node->data = data;
        node->left = createTree();
        node->right = createTree();
        return node;
    }
}

// 前序遍历二叉树
void preorderTraversal(TreeNode* root) {
    if (root == NULL) {
        return;
    }
    printf('%d ', root->data);
    preorderTraversal(root->left);
    preorderTraversal(root->right);
}

// 中序遍历二叉树
void inorderTraversal(TreeNode* root) {
    if (root == NULL) {
        return;
    }
    inorderTraversal(root->left);
    printf('%d ', root->data);
    inorderTraversal(root->right);
}

// 后序遍历二叉树
void postorderTraversal(TreeNode* root) {
    if (root == NULL) {
        return;
    }
    postorderTraversal(root->left);
    postorderTraversal(root->right);
    printf('%d ', root->data);
}

// 统计二叉树叶子结点个数
int countLeaves(TreeNode* root) {
    if (root == NULL) {
        return 0;
    }
    if (root->left == NULL && root->right == NULL) {
        return 1;
    }
    return countLeaves(root->left) + countLeaves(root->right);
}

int main() {
    printf('请输入前序遍历序列构建二叉树(0表示空结点):\n');
    TreeNode* root = createTree();
    
    printf('前序遍历结果:');
    preorderTraversal(root);
    printf('\n');
    
    printf('中序遍历结果:');
    inorderTraversal(root);
    printf('\n');
    
    printf('后序遍历结果:');
    postorderTraversal(root);
    printf('\n');
    
    int leaves = countLeaves(root);
    printf('叶子结点个数:%d\n', leaves);
    
    return 0;
}
C语言实现二叉树的前序,中序,后序遍历及叶子节点统计

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

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