C言語での二分探索木(Binary Search Tree)のプログラム例


まず、二分探索木のノードを表す構造体を定義します。

struct Node {
    int data;
    struct Node* left;
    struct Node* right;
};

次に、ノードを挿入するための関数を作成します。

struct Node* insert(struct Node* root, int data) {
    if (root == NULL) {
        struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
        newNode->data = data;
        newNode->left = NULL;
        newNode->right = NULL;
        return newNode;
    } else {
        if (data <= root->data) {
            root->left = insert(root->left, data);
        } else {
            root->right = insert(root->right, data);
        }
        return root;
    }
}

次に、ノードを検索するための関数を作成します。

struct Node* search(struct Node* root, int data) {
    if (root == NULL || root->data == data) {
        return root;
    }
    if (data < root->data) {
        return search(root->left, data);
    }
    return search(root->right, data);
}

さらに、二分探索木を走査するための関数も作成します。

void inorderTraversal(struct Node* root) {
    if (root != NULL) {
        inorderTraversal(root->left);
        printf("%d ", root->data);
        inorderTraversal(root->right);
    }
}

これらの関数を使用して、二分探索木を作成し、データを挿入し、検索することができます。以下は使用例です。

int main() {
    struct Node* root = NULL;
    root = insert(root, 50);
    insert(root, 30);
    insert(root, 20);
    insert(root, 40);
    insert(root, 70);
    insert(root, 60);
    insert(root, 80);
    printf("Inorder traversal: ");
    inorderTraversal(root);
    struct Node* searchResult = search(root, 40);
    if (searchResult != NULL) {
        printf("\n%d found in the tree.", searchResult->data);
    } else {
        printf("\n%d not found in the tree.", 40);
    }
    return 0;
}

このプログラムでは、二分探索木を作成し、ノードを挿入し、検索する方法を示しています。さらに、走査関数を使用して二分探索木のデータを表示することもできます。

このコード例を参考にして、自分自身で二分探索木に関するさまざまな操作を実装してみてください。