#include <stdio.h>
#include <stdlib.h>
// ノード構造体の定義
typedef struct node {
int val;
struct node *left;
struct node *right;
} Node;
// 新しいノードを作成する関数
Node* createNode(int val) {
Node
* newNode
= (Node
*)malloc(sizeof(Node
)); newNode->val = val;
newNode->left = newNode->right = NULL;
return newNode;
}
// ソート済み配列からバランスの良いBSTを再帰的に構築する関数
Node* buildBalancedBST(int arr[], int start, int end) {
if (start > end) return NULL;
int mid = (start + end) / 2;
Node* root = createNode(arr[mid]);
root->left = buildBalancedBST(arr, start, mid - 1);
root->right = buildBalancedBST(arr, mid + 1, end);
return root;
}
// 中間順(In-Order)走査で確認
void inorderTraversal(Node* root) {
if (!root) return;
inorderTraversal(root->left);
inorderTraversal(root->right);
}
// メモリ解放
void freeTree(Node* root) {
if (!root) return;
freeTree(root->left);
freeTree(root->right);
}
// メイン関数
int main() {
int arr[] = {2, 3, 5, 8, 13, 21}; // ソート済みの配列
int n = sizeof(arr) / sizeof(arr[0]);
Node* root = buildBalancedBST(arr, 0, n - 1);
printf("In-Order Traversal: "); inorderTraversal(root); // 昇順で表示されるはず
freeTree(root); // メモリを解放
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCi8vIOODjuODvOODieani+mAoOS9k+OBruWumue+qQp0eXBlZGVmIHN0cnVjdCBub2RlIHsKICAgIGludCB2YWw7CiAgICBzdHJ1Y3Qgbm9kZSAqbGVmdDsKICAgIHN0cnVjdCBub2RlICpyaWdodDsKfSBOb2RlOwoKLy8g5paw44GX44GE44OO44O844OJ44KS5L2c5oiQ44GZ44KL6Zai5pWwCk5vZGUqIGNyZWF0ZU5vZGUoaW50IHZhbCkgewogICAgTm9kZSogbmV3Tm9kZSA9IChOb2RlKiltYWxsb2Moc2l6ZW9mKE5vZGUpKTsKICAgIG5ld05vZGUtPnZhbCA9IHZhbDsKICAgIG5ld05vZGUtPmxlZnQgPSBuZXdOb2RlLT5yaWdodCA9IE5VTEw7CiAgICByZXR1cm4gbmV3Tm9kZTsKfQoKLy8g44K944O844OI5riI44G/6YWN5YiX44GL44KJ44OQ44Op44Oz44K544Gu6Imv44GEQlNU44KS5YaN5biw55qE44Gr5qeL56+J44GZ44KL6Zai5pWwCk5vZGUqIGJ1aWxkQmFsYW5jZWRCU1QoaW50IGFycltdLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIE5VTEw7CiAgICBpbnQgbWlkID0gKHN0YXJ0ICsgZW5kKSAvIDI7CiAgICBOb2RlKiByb290ID0gY3JlYXRlTm9kZShhcnJbbWlkXSk7CiAgICByb290LT5sZWZ0ID0gYnVpbGRCYWxhbmNlZEJTVChhcnIsIHN0YXJ0LCBtaWQgLSAxKTsKICAgIHJvb3QtPnJpZ2h0ID0gYnVpbGRCYWxhbmNlZEJTVChhcnIsIG1pZCArIDEsIGVuZCk7CiAgICByZXR1cm4gcm9vdDsKfQoKLy8g5Lit6ZaT6aCG77yISW4tT3JkZXLvvInotbDmn7vjgafnorroqo0Kdm9pZCBpbm9yZGVyVHJhdmVyc2FsKE5vZGUqIHJvb3QpIHsKICAgIGlmICghcm9vdCkgcmV0dXJuOwogICAgaW5vcmRlclRyYXZlcnNhbChyb290LT5sZWZ0KTsKICAgIHByaW50ZigiJWQgIiwgcm9vdC0+dmFsKTsKICAgIGlub3JkZXJUcmF2ZXJzYWwocm9vdC0+cmlnaHQpOwp9CgovLyDjg6Hjg6Ljg6rop6PmlL4Kdm9pZCBmcmVlVHJlZShOb2RlKiByb290KSB7CiAgICBpZiAoIXJvb3QpIHJldHVybjsKICAgIGZyZWVUcmVlKHJvb3QtPmxlZnQpOwogICAgZnJlZVRyZWUocm9vdC0+cmlnaHQpOwogICAgZnJlZShyb290KTsKfQoKLy8g44Oh44Kk44Oz6Zai5pWwCmludCBtYWluKCkgewogICAgaW50IGFycltdID0gezIsIDMsIDUsIDgsIDEzLCAyMX07ICAvLyDjgr3jg7zjg4jmuIjjgb/jga7phY3liJcKICAgIGludCBuID0gc2l6ZW9mKGFycikgLyBzaXplb2YoYXJyWzBdKTsKCiAgICBOb2RlKiByb290ID0gYnVpbGRCYWxhbmNlZEJTVChhcnIsIDAsIG4gLSAxKTsKCiAgICBwcmludGYoIkluLU9yZGVyIFRyYXZlcnNhbDogIik7CiAgICBpbm9yZGVyVHJhdmVyc2FsKHJvb3QpOyAgLy8g5piH6aCG44Gn6KGo56S644GV44KM44KL44Gv44GaCiAgICBwcmludGYoIlxuIik7CgogICAgZnJlZVRyZWUocm9vdCk7ICAvLyDjg6Hjg6Ljg6rjgpLop6PmlL4KCiAgICByZXR1cm4gMDsKfQoK