Files
hello-algo/ja/codes/c/chapter_tree/binary_tree_bfs.c
Yudong Jin d7b2277d2b Re-translate the Japanese version (#1871)
* Retranslate Japanese docs with GPT-5.4

* Retranslate Japanese code with GPT-5.4
2026-03-30 07:30:15 +08:00

74 lines
1.9 KiB
C

/**
* File: binary_tree_bfs.c
* Created Time: 2023-01-11
* Author: Reanon (793584285@qq.com)
*/
#include "../utils/common.h"
#define MAX_SIZE 100
/* レベル順走査 */
int *levelOrder(TreeNode *root, int *size) {
/* 補助キュー */
int front, rear;
int index, *arr;
TreeNode *node;
TreeNode **queue;
/* 補助キュー */
queue = (TreeNode **)malloc(sizeof(TreeNode *) * MAX_SIZE);
// キューへのポインタ
front = 0, rear = 0;
// 根ノードを追加する
queue[rear++] = root;
// 走査順序を保存するためのリストを初期化する
/* 補助配列 */
arr = (int *)malloc(sizeof(int) * MAX_SIZE);
// 配列ポインタ
index = 0;
while (front < rear) {
// デキュー
node = queue[front++];
// ノードの値を保存する
arr[index++] = node->val;
if (node->left != NULL) {
// 左子ノードをキューに追加
queue[rear++] = node->left;
}
if (node->right != NULL) {
// 右子ノードをキューに追加
queue[rear++] = node->right;
}
}
// 配列長の値を更新
*size = index;
arr = realloc(arr, sizeof(int) * (*size));
// 補助配列の領域を解放する
free(queue);
return arr;
}
/* Driver Code */
int main() {
/* 二分木を初期化 */
// ここでは、配列から直接二分木を生成する関数を利用する
int nums[] = {1, 2, 3, 4, 5, 6, 7};
int size = sizeof(nums) / sizeof(int);
TreeNode *root = arrayToTree(nums, size);
printf("二分木を初期化\n");
printTree(root);
/* レベル順走査 */
// 配列の長さを渡す必要がある
int *arr = levelOrder(root, &size);
printf("レベル順走査のノード出力シーケンス = ");
printArray(arr, size);
// メモリを解放する
freeMemoryTree(root);
free(arr);
return 0;
}