「データ構造 - C 言語実装ツリー (ツリー)」は、バイナリ ツリーを実装し、preorder、inorder、および postorder トラバーサルを含みます

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

// 定义二叉树的节点结构体
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
};

// 创建一个新的节点
struct TreeNode* new_node(int val) {
    struct TreeNode* node = (struct TreeNode*) malloc(sizeof(struct TreeNode));
    node->val = val;
    node->left = NULL;
    node->right = NULL;
    return node;
}

// 插入节点
struct TreeNode* insert_node(struct TreeNode* root, int val) {
    if (root == NULL) {
        root = new_node(val);
        return root;
    }
    if (val < root->val) {
        root->left = insert_node(root->left, val);
    } else {
        root->right = insert_node(root->right, val);
    }
    return root;
}

// 前序遍历
void preorder_traversal(struct TreeNode* root) {
    if (root != NULL) {
        printf("%d ", root->val);
        preorder_traversal(root->left);
        preorder_traversal(root->right);
    }
}

// 中序遍历
void inorder_traversal(struct TreeNode* root) {
    if (root != NULL) {
        inorder_traversal(root->left);
        printf("%d ", root->val);
        inorder_traversal(root->right);
    }
}

// 后序遍历
void postorder_traversal(struct TreeNode* root) {
    if (root != NULL) {
        postorder_traversal(root->left);
        postorder_traversal(root->right);
        printf("%d ", root->val);
    }
}

int main() {
    // 创建一个二叉树
    struct TreeNode* root = new_node(5);
    insert_node(root, 3);
    insert_node(root, 7);
    insert_node(root, 2);
    insert_node(root, 4);
    insert_node(root, 6);
    insert_node(root, 8);

    // 前序遍历二叉树并输出结果
    printf("前序遍历结果:");
    preorder_traversal(root);
    printf("\n");

    // 中序遍历二叉树并输出结果
    printf("中序遍历结果:");
    inorder_traversal(root);
    printf("\n");

    // 后序遍历二叉树并输出结果
    printf("后序遍历结果:");
    postorder_traversal(root);
    printf("\n");

    return 0;
}

この例では、最初にTreeNodestruct という名前の構造体を定義して、バイナリ ツリーのノードを表します。またnew_node、新しいノードを作成し、その値と子ノード ポインターを初期化するための関数も定義します。

関数ではinsert_node、二分木にノードを挿入する関数を実装します。ツリーが空の場合、新しいノードを作成して返します。ノード値がルート ノードより小さい場合は、左側のサブツリーに挿入されます。それ以外の場合は、右側のサブツリーに挿入されます。

関数ではpreorder_traversal、二分木を前順にトラバースする関数を実装します。最初にルート ノードにアクセスし、次に左側をトラバースします。

サブツリー、そして最後に右のサブツリーをトラバースします。関数ではinorder_traversal、二分木を順番にトラバースする関数を実装します。最初に左のサブツリーをトラバースし、次にルート ノードにアクセスし、最後に右のサブツリーをトラバースします。この関数ではpostorder_traversal、バイナリ ツリーのポスト オーダー トラバーサルの関数を実装します。最初に左のサブツリーをトラバースし、次に右のサブツリーをトラバースし、最後にルート ノードにアクセスします。

この関数ではmain、最初に新しい二分木を作成し、いくつかのノードを挿入します。次に、関数と関数をそれぞれ呼び出して、この二分木に対して前順、順順、および後順トラバーサルをpreorder_traversal実行inorder_traversalし、トラバーサルの結果を出力します。postorder_traversal

上記のコードは、バイナリ ツリーの実装と、順序順、順序順、および順序順トラバーサルを示す単純な例にすぎないことに注意してください。実際、実際のアプリケーションでは、バイナリ ツリーのバランス、ノードの挿入と削除のアルゴリズム効率など、いくつかの追加要因を考慮する必要があります。

おすすめ

転載: blog.csdn.net/Like_Bamboo/article/details/129683389