二叉树的层序遍历&&队列使用

/**

* 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().

*/

// 对于返回值是二维数组,一般还需要返回二维数组的行和列的数量,这里returnSize行的个数,returnColumnSizes[]存储着每一行有多少元素

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

    int** arr = (int**)malloc(sizeof(int*) * 2001);//存储结果

    *returnColumnSizes =malloc(sizeof(int)* 2001) ; //存储二维数组每行多少元素

    *returnSize = 0; //初始化行数

    if (root == NULL)

        return NULL;

    struct TreeNode* queue[2001];// 模拟队列

    //初始化队列参数

    struct TreeNode* node;

    int front, rear;

    front = 0;

    rear = 0;

    queue[rear++] = root;// 根节点入队

    while (front < rear) { //队列不为空

        int len = rear- front;//每层长度

        int* level = malloc(sizeof(int)*len);//定义一个数组,用于存储一层的元素

        (*returnColumnSizes) [(*returnSize)] = len;//记录每层长度

        for (int i = 0; i < len; i++) { //将这层的所有元素出队,并将这层元素的左右节点依次入队

            node = queue[front++];

            level[i] = node->val;

            if (node->left != NULL)

                queue[rear++] = node->left;

            if (node->right != NULL)

                queue[rear++] = node->right;

        }

        arr[(*returnSize)++] = level;//将这层元素的值直接赋值给结果数组

    }

    return arr;

}


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容