91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

c語言如何遍歷二叉樹

小億
83
2024-09-03 06:04:17
欄目: 編程語言

在C語言中,遍歷二叉樹有多種方法,包括前序遍歷、中序遍歷和后序遍歷。這里給出一個簡單的例子來說明如何實現這三種遍歷方法。

首先,我們需要定義一個二叉樹節點的結構體:

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

typedef struct TreeNode {
    int data;
    struct TreeNode *left;
    struct TreeNode *right;
} TreeNode;

接下來,我們實現三種遍歷方法的函數:

// 前序遍歷:根節點 -> 左子樹 -> 右子樹
void preOrderTraversal(TreeNode *node) {
    if (node == NULL) {
        return;
    }

    printf("%d ", node->data);
    preOrderTraversal(node->left);
    preOrderTraversal(node->right);
}

// 中序遍歷:左子樹 -> 根節點 -> 右子樹
void inOrderTraversal(TreeNode *node) {
    if (node == NULL) {
        return;
    }

    inOrderTraversal(node->left);
    printf("%d ", node->data);
    inOrderTraversal(node->right);
}

// 后序遍歷:左子樹 -> 右子樹 -> 根節點
void postOrderTraversal(TreeNode *node) {
    if (node == NULL) {
        return;
    }

    postOrderTraversal(node->left);
    postOrderTraversal(node->right);
    printf("%d ", node->data);
}

最后,我們可以創建一個二叉樹并遍歷它:

int main() {
    TreeNode *root = (TreeNode *)malloc(sizeof(TreeNode));
    root->data = 1;
    root->left = (TreeNode *)malloc(sizeof(TreeNode));
    root->right = (TreeNode *)malloc(sizeof(TreeNode));
    root->left->data = 2;
    root->right->data = 3;
    root->left->left = (TreeNode *)malloc(sizeof(TreeNode));
    root->left->right = (TreeNode *)malloc(sizeof(TreeNode));
    root->left->left->data = 4;
    root->left->right->data = 5;
    root->right->left = (TreeNode *)malloc(sizeof(TreeNode));
    root->right->right = (TreeNode *)malloc(sizeof(TreeNode));
    root->right->left->data = 6;
    root->right->right->data = 7;

    printf("前序遍歷:");
    preOrderTraversal(root);
    printf("\n");

    printf("中序遍歷:");
    inOrderTraversal(root);
    printf("\n");

    printf("后序遍歷:");
    postOrderTraversal(root);
    printf("\n");

    return 0;
}

運行這個程序,你將看到以下輸出:

前序遍歷:1 2 4 5 3 6 7
中序遍歷:4 2 5 1 6 3 7
后序遍歷:4 5 2 6 7 3 1

這就是如何在C語言中遍歷二叉樹的方法。注意,這個例子中的二叉樹結構比較簡單,實際應用中的二叉樹可能會更復雜。

0
凌海市| 黑龙江省| 滕州市| 吉木乃县| 大石桥市| 湾仔区| 邵阳县| 承德市| 洛南县| 柘城县| 西畴县| 营口市| 上林县| 革吉县| 阿拉善盟| 云和县| 北流市| 宁强县| 克什克腾旗| 三穗县| 雅江县| 当雄县| 马龙县| 常德市| 电白县| 潍坊市| 甘孜| 巴青县| 阳谷县| 盘锦市| 会宁县| 晋宁县| 永济市| 水城县| 古交市| 黄陵县| 浦城县| 河源市| 特克斯县| 扶余县| 金沙县|