102. 二叉树的层次遍历(C语言)
转自:
作者: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语言)相关推荐
- c++根据二叉树的层次遍历建立二叉树_LeetCode | 102.二叉树的层次遍历
这次来写一下 LeetCode 的第 102 题,二叉树的层次遍历. 题目描述 题目直接从 LeetCode 上截图过来,题目如下: 102.二叉树的层次遍历题目 上面的题就是 二叉树的层次遍历 题目 ...
- leetcode 102 java_Java实现 LeetCode 102 二叉树的层次遍历
102. 二叉树的层次遍历 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / 9 20 ...
- 102. 二叉树的层次遍历
102. 二叉树的层次遍历 题意 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 解题思路 递归:利用前序遍历的思想,在递归过程中记录下结点的深度,在对应深度将结点加 ...
- 按层次遍历二叉树_LeetCode | 102.二叉树的层次遍历
这次来写一下 LeetCode 的第 102 题,二叉树的层次遍历. 题目描述 题目直接从 LeetCode 上截图过来,题目如下: 上面的题就是 二叉树的层次遍历 题目的截图,同时 LeetCode ...
- Leetcode 102. 二叉树的层次遍历
给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / ...
- LeetCode 102. 二叉树的层次遍历(BFS)
文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15, ...
- 【Leetcode】102. 二叉树的层次遍历
题目 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3/ \9 20/ \15 7 返回其层 ...
- LeetCode 102. 二叉树的层次遍历(递归)(迭代)
题目描述 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 思路 详见链接 代码 递归 #class TreeNode: # def __init__(self,x): ...
- Python刷leetcode 102. 二叉树的层次遍历
给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3/ \9 20/ \15 7 返回其层次遍历 ...
最新文章
- 划痕麻点检测程序_精密外观检测机设计
- 编写自己的Shell解释器-3[转]
- C++Jump Search跳转搜索的实现算法(附完整源码)
- 国际导航网二开php源码下载,国际网址导航系统整站源码 v3.5.2
- 杭电acm 2177 取(2堆)石子游戏(威佐夫博弈)
- jqurey datatables属性
- php rewrite url_PHP实现url重写和.htaccess
- hystrix 页面_SpringCloud微服务架构篇5:微服务熔断机制-Hystrix
- 好程序员Java教程分享使用HttpClient抓取页面内容
- nfc卡模式与标准模式_NFC的工作模式有哪些主动模式和被动模式的详细讲解
- SQL VIEW(视图)介绍
- java 文字串叠字检查_正则表达式的相关应用
- 02 推荐的起点:断物识人
- Word文件不能编辑是什么原因?
- 关于宋词频率统计(R语言)
- 计算机代码英语,计算机专业英语 (四)(示例代码)
- html form 提交json数据格式,表单提交时编码类型enctype详解
- 陶哲轩career advice 翻译
- 基于springboot的电影院会员管理系统
- Camera_Engine_Rkisp_User_Manual
热门文章
- 跨境电商与时俱进,流星汇聚紧跟新规则做优质服务
- bcb image 动态大小_实战|使用CSS Paint API动态创建与分辨率无关的可变背景
- 数据库级联操作mysql_数据库进阶实践-级联操作 --
- LinuxI/O多路复用转接服务器——poll模型实现
- 探讨防火墙内核监听模式:ISA2006系列之十六
- 一个二维码矢量绘制方法的记录
- 洛斐的两平米,究竟“挤”了多少寻找有趣生活的年轻人?
- 5G时代必学的WebRTC音视频通话技术
- 优化360小鸟壁纸,让它不再流氓!
- win10更新后游览器一直在建立安全连接甚至都不出来但win10自带的ie正常可以正常打开解决办法