#define NODE_NUM 1500
#define LEVEL_NODE_NUM 150
typedef struct queue {
const struct TreeNode* arr[NODE_NUM];
int head, tail;
} queue_t;
void enqueue(queue_t* queue, const struct TreeNode* root)
{
queue->arr[queue->tail++] = root;
}
const struct TreeNode* dequeue(queue_t* queue)
{
return queue->arr[queue->head++];
}
bool is_empty(const queue_t* queue)
{
return queue->head == queue->tail;
}
int size(const queue_t* queue)
{
return queue->tail - queue->head;
}
typedef struct result {
int* ret[NODE_NUM];
int col[NODE_NUM];
int raw;
} result_t;
void bfs(struct TreeNode* root, queue_t* queue, result_t* result)
{
if (!root)
return;
enqueue(queue, root);
while (!is_empty(queue))
{
int cnt = size(queue);
for(int i = 0; i < cnt; i++)
{
const struct TreeNode* node = dequeue(queue);
result->ret[result->raw][i] = node->val;
if (node->left)
enqueue(queue, node->left);
if (node->right)
enqueue(queue, node->right);
}
result->col[result->raw++] = cnt;
}
}
int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes)
{
result_t* res = (result_t*)malloc(sizeof(result_t));
for(int i = 0; i < NODE_NUM; i++)
res->ret[i] = (int*)malloc(LEVEL_NODE_NUM * sizeof(int));
res->raw = 0;
queue_t queue = {.head = 0, .tail = 0};
bfs(root, &queue, res);
*returnSize = res->raw;
*returnColumnSizes = res->col;
return res->ret;
}
C语言刷题:NC15 求二叉树的层序遍历
最新推荐文章于 2025-04-24 11:11:09 发布