leetcode--二叉树的层序遍历(迭代法)

题目:给定一个二叉树,请编写程序完成层序遍历并返回各结点值

leetcode--二叉树的层序遍历(迭代法)_第1张图片

结点为0直接返回空数组。

注意:树的结点数目范围[0,2000]

每个结点的值范围为[-1000,1000].

大家一定要看注意事项这里,这个消息相当的有用,对于初始化方面可以起到很大的作用。

请大家思考完成下面函数:

/**

//树结构

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

 */

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

}

解释:其中returnSize是返回数组的长度,*returnColumnSize数组是存放每一层遍历的结点个数

我本人是采用迭代法解决的:

在这之前先给大家温习一下层次遍历以及我个人解题的思路。

层序遍历也叫层次遍历:从文字上来看就知道是一层一层的遍历。

leetcode--二叉树的层序遍历(迭代法)_第2张图片

第一步:先遍历第一层结点1 

第二步:遍历第二层结点2,3

第三步:遍历第三层结点4,5,6,7

第四步:遍历第四层结点8

遍历之后的顺序就是1->2->3->4->5->6->7->8

要完成这样的操作就需要借助队列来完成。

首先创建队列结构

需要创建队列就需要开辟空间。不知道有没有同学会问为什么开辟2001个,而不是其他,如果您又这样的疑问的话,那就是说明您没有仔细的看题目了。题目最后又一个注意事项。树结点数目范围[0,2000],也就是2001.

 

 

 初始化头尾指针,最初都设定为-1;

有了队列结构和空间之后,下一步就是入队和出队了。

leetcode--二叉树的层序遍历(迭代法)_第3张图片

 先入队的先出

回到题目的答案上来:

leetcode--二叉树的层序遍历(迭代法)_第4张图片

 

 

你可能感兴趣的:(c语言,数据结构与算法)