C++ 二分木の構築と走査:基本と実装

C++では、二分木ノードの構造体を定義し、再帰的な方法で二分木を構築および走査できます。

以下はコードの例です。

#include <iostream>

struct TreeNode {
    int data;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : data(x), left(nullptr), right(nullptr) {}
};

void insert(TreeNode* &root, int data) {
    if (root == nullptr) {
        root = new TreeNode(data);
    } else {
        if (data < root->data) {
            insert(root->left, data);
        } else {
            insert(root->right, data);
        }
    }
}

void inorderTraversal(TreeNode* root) {
    if (root == nullptr) {
        return;
    }
    inorderTraversal(root->left);
    std::cout << root->data << " ";
    inorderTraversal(root->right);
}

int main() {
    TreeNode* root = nullptr;
    int arr[] = {5, 3, 8, 2, 4, 7, 9};
    for (int num : arr) {
        insert(root, num);
    }

    std::cout << "Inorder traversal: ";
    inorderTraversal(root);
    std::cout << std::endl;

    return 0;
}

上記のコードでは、データフィールドdataと左右の子ノードを指すleftおよびrightのポインタを持つTreeNodeという名前の二分木ノード構造体が定義されています。そして、insert関数を使用して再帰的にノードを挿入して二分木を構築し、inorderTraversal関数を使用して二分木内のすべてのノードデータを中順に出力します。

必要に応じてコードを変更して、他の走査方法(例:先行順、後行順)を実装することができます。

bannerAds