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関数を使用して二分木内のすべてのノードデータを中順に出力します。
必要に応じてコードを変更して、他の走査方法(例:先行順、後行順)を実装することができます。