给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。请用C语言实现
时间: 2024-01-05 16:56:37 浏览: 133
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
typedef struct TreeNode TreeNode;
int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){
if (!root) {
*returnSize = 0;
return NULL;
}
int** res = (int**)malloc(sizeof(int*) * 1000); //定义结果数组
*returnColumnSizes = (int*)malloc(sizeof(int) * 1000); //定义每行元素个数的数组
int front = 0, rear = 0; //定义队列的头尾指针
TreeNode* queue[1000] = {0}; //定义队列
queue[rear++] = root; //根节点入队
int row = 0; //定义行数
while (front != rear) { //队列不为空时循环
int size = rear - front; //记录该行元素个数
res[row] = (int*)malloc(sizeof(int) * size); //分配该行元素空间
(*returnColumnSizes)[row] = size; //记录该行元素个数
for (int i = 0; i < size; i++) { //循环该行元素
TreeNode* temp = queue[front++]; //队头元素出队
res[row][i] = temp->val; //记录该行元素
if (temp->left) queue[rear++] = temp->left; //左子树入队
if (temp->right) queue[rear++] = temp->right; //右子树入队
}
row++; //行数加1
}
*returnSize = row; //记录总行数
return res;
}
阅读全文