Leetcode102题 层序遍历

int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){

    if(root == NULL){
        *returnSize = 0;
        ** returnColumnSizes = NULL;
        return NULL;
    }

    *returnSize = 0;
    int** res = (int**)malloc(sizeof(int*) * 10001);
    *returnColumnSizes = (int*)malloc(sizeof(int*)*10001);
    struct TreeNode* queue[10001];
    int head = 0, rear = 0;
    queue[rear++] = root; 

    while(rear > head){
        int k = 0;//记录当前个数
        int pre = rear;//记录当前最后一个节点
        res[*returnSize] = (int*)malloc(sizeof(int) * (pre - head));

        while(pre > head){
            res[*returnSize][k++] = queue[head]->val;
            if(queue[head]->left != NULL){
                queue[rear++] = queue[head]->left;
            }
            if(queue[head]->right != NULL){
                queue[rear++] = queue[head]->right;
            }
            head++;
        }

        (*returnColumnSizes)[(*returnSize)++] = k;

    }

    return res;
}

 

posted @ 2021-11-29 19:55  冬日寻雾记  阅读(43)  评论(0)    收藏  举报