102. Binary Tree Level Order Traversal(C语言)
一层一层输出二叉树的节点值
题目
Given the root of a binary tree, return the level order traversal of its nodes’ values. (i.e., from left to right, level by level).
Example 1:
Input: root = [3,9,20,null,null,15,7]
Output: [[3],[9,20],[15,7]]
Example 2:
Input: root = [1]
Output: [[1]]
Example 3:
Input: root = []
Output: []
Constraints:
The number of nodes in the tree is in the range [0, 2000].
-1000 <= Node.val <= 1000
解答
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *returnColumnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
*/
#define MAX 2001
void Tra(struct TreeNode* root, int **ret, int deep, int* returnSize, int** returnColumnSizes)
{
if(root == NULL)
return ;
if((*returnColumnSizes)[deep] == 0)
{
ret[deep] = (int *)malloc(sizeof(int)*MAX);
(*returnSize) ++;
}
int i = (*returnColumnSizes)[deep];
ret[deep][i] = root->val;
(*returnColumnSizes)[deep] ++;
Tra(root->left, ret, deep+1, returnSize, returnColumnSizes);
Tra(root->right, ret, deep+1, returnSize, returnColumnSizes);
}
int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){
int **ret = (int **)malloc(sizeof(int *) * MAX);
*returnSize = 0;
*returnColumnSizes = (int *)malloc(sizeof(int)*MAX);
memset(*returnColumnSizes, 0, sizeof(int)*MAX);
Tra(root, ret, 0, returnSize, returnColumnSizes);
return ret;
}
总结
注意传入参数 int** returnColumnSizes 是传入的一个数组,且需要memset