中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

C語言二叉樹遍歷代碼怎么寫

小億
83
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
建水县| 环江| 稷山县| 德格县| 沅陵县| 尚义县| 聊城市| 龙山县| 山阴县| 清流县| 道孚县| 辛集市| 贵溪市| 扶风县| 大港区| 肥城市| 抚远县| 南投市| 荥经县| 罗源县| 义马市| 尼勒克县| 无为县| 北票市| 乌拉特前旗| 高尔夫| 富源县| 吴江市| 曲阳县| 于田县| 孝昌县| 额济纳旗| 武清区| 广河县| 浑源县| 绥阳县| 福鼎市| 广州市| 邓州市| 滕州市| 图们市|