c语言

C语言二叉树遍历代码怎么写

小亿
84
2023-12-15 18:11:50
栏目: 编程语言

以下是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("内存分配失败!\n");
        exit(1);
    }
    newNode->data = data;
    newNode->left = NULL;
    newNode->right = NULL;
    return newNode;
}

// 前序遍历
void preorderTraversal(Node* root) {
    if(root != NULL) {
        printf("%d ", root->data);  // 先访问根节点
        preorderTraversal(root->left);  // 再前序遍历左子树
        preorderTraversal(root->right);  // 最后前序遍历右子树
    }
}

// 中序遍历
void inorderTraversal(Node* root) {
    if(root != NULL) {
        inorderTraversal(root->left);  // 先中序遍历左子树
        printf("%d ", root->data);  // 再访问根节点
        inorderTraversal(root->right);  // 最后中序遍历右子树
    }
}

// 后序遍历
void postorderTraversal(Node* root) {
    if(root != NULL) {
        postorderTraversal(root->left);  // 先后序遍历左子树
        postorderTraversal(root->right);  // 再后序遍历右子树
        printf("%d ", root->data);  // 最后访问根节点
    }
}

int main() {
    // 创建二叉树
    Node* root = createNode(1);
    root->left = createNode(2);
    root->right = createNode(3);
    root->left->left = createNode(4);
    root->left->right = createNode(5);

    // 前序遍历二叉树
    printf("前序遍历:");
    preorderTraversal(root);
    printf("\n");

    // 中序遍历二叉树
    printf("中序遍历:");
    inorderTraversal(root);
    printf("\n");

    // 后序遍历二叉树
    printf("后序遍历:");
    postorderTraversal(root);
    printf("\n");

    return 0;
}

这段代码首先定义了一个二叉树节点的结构体 Node,其中包含数据 data、左子节点指针 left 和右子节点指针 right。接着,定义了创建新节点的函数 createNode,用于动态分配内存,并返回新节点。然后,分别实现了三种遍历方式的函数:preorderTraversal(前序遍历)、inorderTraversal(中序遍历)和 postorderTraversal(后序遍历)。最后,在 main 函数中创建了一个二叉树,并分别调用了三种遍历函数,打印出遍历结果。

0
看了该问题的人还看了