转自:

作者:ruo-xian
链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/solution/cyu-yan-fei-di-gui-dui-lie-bfs-by-ruo-xian/
来源:力扣(LeetCode)

题目难度在于要按层存入数组。数组的行数控制由树的深度决定int depth = GetTreeDepth(root);

数组的列由队列大小决定,只有根节点,队列中只有一个元素,q.size=1,出队后入队了两个左右子节点q.size=2,如果前面的两个子节点都分别有左右节点,则前面的两个子节点出队后入队四个。对边界条件的判断好。

#define MAX_SIZE 1000typedef struct {int front;int rear;int size;struct TreeNode* data[MAX_SIZE];
} Queue;void Init(Queue *q)
{q->front = -1;q->rear = -1;q->size = 0;memset(q->data, 0, sizeof(struct TreeNode*) * MAX_SIZE);
}int Push(Queue *q, struct TreeNode* node)
{assert(q && node && q->size != MAX_SIZE);if (q == NULL || node == NULL || q->size == MAX_SIZE)return -1;q->rear++;q->rear %= MAX_SIZE;q->data[q->rear] = node;q->size++;return 0;
}int Pop(Queue *q, struct TreeNode** node)
{assert(q && node && q->size != 0);if (q == NULL || node == NULL || q->size == 0)return -1;q->front++;q->front %= MAX_SIZE;*node = q->data[q->front];q->size--;return 0;
}int GetTreeDepth(const struct TreeNode* root)
{if (root == NULL)return 0;int left = GetTreeDepth(root->left);int right = GetTreeDepth(root->right);return left > right ? left + 1 : right + 1;
}int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes)
{if (root == NULL || returnSize == NULL || returnColumnSizes == NULL) {*returnSize = 0;*returnColumnSizes = (int *)malloc(sizeof(int) * 1);(*returnColumnSizes)[0] = 0;                return NULL;}Queue q;Init(&q);Push(&q, root);int depth = GetTreeDepth(root);*returnSize = depth;int **matrix = (int **)malloc(sizeof(int *) * depth);*returnColumnSizes = (int *)malloc(sizeof(int) * depth);if (matrix == NULL || returnColumnSizes == NULL)return NULL;int cur_depth = 0;while(q.size != 0) {int level_size = q.size;/* create raw */(*returnColumnSizes)[cur_depth] = level_size;matrix[cur_depth] = (int *)malloc(sizeof(int) * level_size);int cur = 0;while (level_size--) {struct TreeNode* node;Pop(&q, &node);/* add node->val to res */matrix[cur_depth][cur] = node->val;if (node->left)Push(&q, node->left);if (node->right)Push(&q, node->right);cur++;}cur_depth++;}return matrix;
}

102. 二叉树的层次遍历(C语言)相关推荐

  1. c++根据二叉树的层次遍历建立二叉树_LeetCode | 102.二叉树的层次遍历

    这次来写一下 LeetCode 的第 102 题,二叉树的层次遍历. 题目描述 题目直接从 LeetCode 上截图过来,题目如下: 102.二叉树的层次遍历题目 上面的题就是 二叉树的层次遍历 题目 ...

  2. leetcode 102 java_Java实现 LeetCode 102 二叉树的层次遍历

    102. 二叉树的层次遍历 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / 9 20 ...

  3. 102. 二叉树的层次遍历

    102. 二叉树的层次遍历 题意 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 解题思路 递归:利用前序遍历的思想,在递归过程中记录下结点的深度,在对应深度将结点加 ...

  4. 按层次遍历二叉树_LeetCode | 102.二叉树的层次遍历

    这次来写一下 LeetCode 的第 102 题,二叉树的层次遍历. 题目描述 题目直接从 LeetCode 上截图过来,题目如下: 上面的题就是 二叉树的层次遍历 题目的截图,同时 LeetCode ...

  5. Leetcode 102. 二叉树的层次遍历

    给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3    / \   9  20     / ...

  6. LeetCode 102. 二叉树的层次遍历(BFS)

    文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15, ...

  7. 【Leetcode】102. 二叉树的层次遍历

    题目 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3/ \9 20/ \15 7 返回其层 ...

  8. LeetCode 102. 二叉树的层次遍历(递归)(迭代)

    题目描述 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 思路 详见链接 代码 递归 #class TreeNode: # def __init__(self,x): ...

  9. Python刷leetcode 102. 二叉树的层次遍历

    给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3/ \9 20/ \15 7 返回其层次遍历 ...

最新文章

  1. 划痕麻点检测程序_精密外观检测机设计
  2. 编写自己的Shell解释器-3[转]
  3. C++Jump Search跳转搜索的实现算法(附完整源码)
  4. 国际导航网二开php源码下载,国际网址导航系统整站源码 v3.5.2
  5. 杭电acm 2177 取(2堆)石子游戏(威佐夫博弈)
  6. jqurey datatables属性
  7. php rewrite url_PHP实现url重写和.htaccess
  8. hystrix 页面_SpringCloud微服务架构篇5:微服务熔断机制-Hystrix
  9. 好程序员Java教程分享使用HttpClient抓取页面内容
  10. nfc卡模式与标准模式_NFC的工作模式有哪些主动模式和被动模式的详细讲解
  11. SQL VIEW(视图)介绍
  12. java 文字串叠字检查_正则表达式的相关应用
  13. 02 推荐的起点:断物识人
  14. Word文件不能编辑是什么原因?
  15. 关于宋词频率统计(R语言)
  16. 计算机代码英语,计算机专业英语 (四)(示例代码)
  17. html form 提交json数据格式,表单提交时编码类型enctype详解
  18. 陶哲轩career advice 翻译
  19. 基于springboot的电影院会员管理系统
  20. Camera_Engine_Rkisp_User_Manual

热门文章

  1. 跨境电商与时俱进,流星汇聚紧跟新规则做优质服务
  2. bcb image 动态大小_实战|使用CSS Paint API动态创建与分辨率无关的可变背景
  3. 数据库级联操作mysql_数据库进阶实践-级联操作 --
  4. LinuxI/O多路复用转接服务器——poll模型实现
  5. 探讨防火墙内核监听模式:ISA2006系列之十六
  6. 一个二维码矢量绘制方法的记录
  7. 洛斐的两平米,究竟“挤”了多少寻找有趣生活的年轻人?
  8. 5G时代必学的WebRTC音视频通话技术
  9. 优化360小鸟壁纸,让它不再流氓!
  10. win10更新后游览器一直在建立安全连接甚至都不出来但win10自带的ie正常可以正常打开解决办法