题目:
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
示例 2:
输入:root = [1]
输出:[[1]]
示例 3:
输入:root = []
输出:[]
提示:
- 树中节点数目在范围 [0, 2000] 内
- -1000 <= Node.val <= 1000
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/binary-tree-level-order-traversal
题解:
用队列来做这道题,先让 root 入队,只要队列非空进入循环。然后处理每一层的节点,循环过程中每次有一个节点出队,就让它的左右孩子入队(如果该节点有左右孩子)。处理完一层,继续外层的队列循环,处理下一层。
int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){
int **result=NULL;
int *columnSize=NULL;
struct TreeNode* queue[10000]={0};
struct TreeNode* node=NULL;
int front=0,rear=0,pre;
*returnSize=0;
if(root==NULL) return NULL;
queue[rear++]=root;
int i=0,j=0;
while(front<rear){
pre=rear;
result=realloc(result,sizeof(int*)*(i+1));
result[i]=calloc(rear-front,sizeof(int));
while(front<pre){
node=queue[front++];
result[i][j++]=node->val;
if(node->left) queue[rear++]=node->left;
if(node->right) queue[rear++]=node->right;
}
columnSize=realloc(columnSize,sizeof(int)*(i+1));
columnSize[i++]=j;
j=0;
}
*returnSize=i;
*returnColumnSizes=columnSize;
return result;
}
执行结果: