建立二叉树并实现层序遍历
本次用c语言实现层序遍历。
层序遍历:从上到下一层一层的遍历。和bfs类似,但需实现分层,所以返回结果应该是一个二维数组。所以在实现过程中会用到二层指针,相对会有点难实现,但很好理解。
如:
结果为:[{3},{9,20},{15,7}]
代码实现过程:
①建立二叉树
②层序遍历
建立二叉树代码:
struct TreeNode* Initial()
{int data;char temp;struct TreeNode* T;scanf_s("%d", &data);//temp=getchar(); //吸取空格if (data == -1) //输入-1表示结束建立当前结点的子节点return NULL;T = (struct TreeNode*)malloc(sizeof(struct TreeNode));T->val = data;T->left = Initial();T->right = Initial();return T; //返回根结点
}
层序遍历代码:
int** LeavelOrder(struct TreeNode* root, int* returnSize, int** colSize)
{*returnSize = 0;if (root == NULL) //根结点为空直接返回return NULL;int** ans = (int**)malloc(sizeof(int*) * 101); //答案存放位置,将其指向一块存放101个整形指针的空间(*colSize) = (int*)malloc(sizeof(int) * 101); //struct TreeNode* cur;struct TreeNode* queue[101]; //数组模拟栈int head = 0, bottom = 0; //bottom入栈,head出栈queue[bottom++] = root; //根结点入栈while (head != bottom) //栈空{int col = 0;int last = bottom;ans[(*returnSize)] = (int*)malloc(sizeof(int)*(last - head)); //开辟ans数组列数while (last > head) //遍历完一层则退出(分层){cur = queue[head++];ans[*returnSize][col++] = cur->val;if (cur->left != NULL){queue[bottom++] = cur->left;}if (cur->right != NULL){queue[bottom++] = cur->right;}}(*colSize)[(*returnSize)] = col;(*returnSize)++;}return ans;
}
完整代码(编译环境为vs,故输入为scanf_s):
#include <stdio.h>
//数据范围:节点数都为100;
struct TreeNode {int val;struct TreeNode* left;struct TreeNode* right;
};
int** LeavelOrder(struct TreeNode* root, int* returnSize, int** colSize)
{*returnSize = 0;if (root == NULL) //根结点为空直接返回return NULL;int** ans = (int**)malloc(sizeof(int*) * 101); //答案存放位置,将其指向一块存放101个整形指针的空间(*colSize) = (int*)malloc(sizeof(int) * 101); //struct TreeNode* cur;struct TreeNode* queue[101]; //数组模拟栈int head = 0, bottom = 0; //bottom入栈,head出栈queue[bottom++] = root; //根结点入栈while (head != bottom) //栈空{int col = 0;int last = bottom;ans[(*returnSize)] = (int*)malloc(sizeof(int)*(last - head)); //开辟ans数组列数while (last > head) //遍历完一层则退出(分层){cur = queue[head++];ans[*returnSize][col++] = cur->val;if (cur->left != NULL){queue[bottom++] = cur->left;}if (cur->right != NULL){queue[bottom++] = cur->right;}}(*colSize)[(*returnSize)] = col;(*returnSize)++;}return ans;
}
struct TreeNode* Initial()
{int data;char temp;struct TreeNode* T;scanf_s("%d", &data);//temp=getchar(); //吸取空格if (data == -1) //输入-1表示结束建立当前结点的子节点return NULL;T = (struct TreeNode*)malloc(sizeof(struct TreeNode));T->val = data;T->left = Initial();T->right = Initial();return T; //返回根结点
}
int main()
{//建立二叉树//struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode*));int i = 0;int* j;int** ans = LeavelOrder(Initial(), &i, &j);int k = 0;for (int x = 0; x < i; x++){for (int w = 0; w < j[k]; w++){printf("%d ", ans[x][w]);;}k++;printf("\n");}return 0;
}
运行结果:
注:后三行为输出结果
学习总结:
之所以用c语言实现这些数据结构和算法虽然比调用现成的函数复杂很多,但只有这个过程才能让自己真正的理解其中的细节。知其然而不知其所以然是不能真正得到提升。
水平有限,若有错误还请指出
建立二叉树并实现层序遍历相关推荐
- 数据结构实验之二叉树五:层序遍历 // oj3344 队列+二叉树 // 先序 --层次
原题链接:oj3344 数据结构实验之二叉树五:层序遍历 Description 已知一个按先序输入的字符序列,如abd,eg,cf,(其中,表示空结点).请建立二叉树并求二叉树的层次遍历序列. In ...
- 3344 数据结构实验之二叉树五:层序遍历
数据结构实验之二叉树五:层序遍历 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 已知一个按先序输入的字符序列,如abd,,e ...
- 数据结构实验之二叉树五:层序遍历(STL和模拟队列两种方法)
Description 已知一个按先序输入的字符序列,如abd,eg,cf,(其中,表示空结点).请建立二叉树并求二叉树的层次遍历序列. Input 输入数据有多行,第一行是一个整数t (t<1 ...
- bartender一行打印两个二次开发_C++ 智能指针和二叉树:图解层序遍历和逐层打印二叉树...
作者:apocelipes 链接:https://www.cnblogs.com/apocelipes/p/10758692.html 二叉树是极为常见的数据结构,关于如何遍历其中元素的文章更是数不 ...
- 数据结构实验之二叉树五:层序遍历
题目描述 已知一个按先序输入的字符序列,如abd,,eg,,,cf,,,(其中,表示空结点).请建立二叉树并求二叉树的层次遍历序列. 输入 输入数据有多行,第一行是一个整数t (t<1000) ...
- BFS(二)二叉树层序遍历(I、II)、二叉树锯齿形层序遍历、N叉树层序遍历
目录 102. 二叉树的层序遍历 107. 二叉树的层序遍历 II 103. 二叉树的锯齿形层序遍历 429. N 叉树的层序遍历 102. 二叉树的层序遍历 给你二叉树的根节点 root ,返回其节 ...
- 常考数据结构与算法:二叉树的之字形层序遍历
题目描述 给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该二叉树之字形层序遍历的结果是 [ ...
- 牛客题霸 [二叉树的之字形层序遍历] C++题解/答案
牛客题霸 [二叉树的之字形层序遍历] C++题解/答案 题目描述 给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替) 例如: 给定的二叉树是{3,9,20, ...
- 二叉树的之字形层序遍历
二叉树的之字形层序遍历 1.参考资料 https://www.nowcoder.com/practice/47e1687126fa461e8a3aff8632aa5559 2.题目要求 题目描述 给定 ...
最新文章
- Ubuntu 下添加OpenERP command 快捷启动方式
- 【Spark篇】---SparkStream初始与应用
- oracle的那些事
- Android - N级树形结构实现
- 【转】PYTHON open/文件操作
- 2021年安徽高考英语口试成绩查询,2021高考英语口语考试成绩
- 【数据结构与算法】之深入解析“打家劫舍”的求解思路与算法示例
- 大端模式小端模式 主机序网络序
- teleport 组件的作用_人脸识别综述! 覆盖人脸检测,预处理和特征表示三大核心组件!...
- nginx历史版本下载链接
- python 超像素分割
- 基于视觉SLAM的无人机仿真-px4-gazebo
- 下载各种离线地图(包括高德英文版地图)
- SAP笔记MM (中文版学习)
- 包政讲营销录音(1)
- 一文弄懂BIN、HEX、AXF、ELF文件格式的区别
- 直接把结果输出到打印机
- 【CPU GPU TPU】机器学习扫盲篇
- UE4.26源码版学习广域网独立服务器时遇到的客户端运行黑屏问题
- MySQL-性能分析语句 show profile和show profiles
热门文章
- Electron:想简单了解一下electron-react-boilerplate应用模板
- 好压打开压缩包文件名乱码问题一步教你解决
- [车联网安全自学篇] Android安全之Android 如何生成APP(APK)「详解」
- 使用Android Glide技术实现图片加载和播放视频
- 诺基亚2009挑战赛和Ovi Store
- 【解决方案】EasyCVR智能安防监控平台在石油能源行业中的应用
- 深度:一年举办10000场中老年文娱活动,链接5000个社区,社区天天乐如何成为老年行业中的快公司?
- 如何在网页中打开一个本地桌面程序
- ASP运行环境的搭建
- [Design]平面设计教程-《大师之路》