本次用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语言实现这些数据结构和算法虽然比调用现成的函数复杂很多,但只有这个过程才能让自己真正的理解其中的细节。知其然而不知其所以然是不能真正得到提升。

水平有限,若有错误还请指出

建立二叉树并实现层序遍历相关推荐

  1. 数据结构实验之二叉树五:层序遍历 // oj3344 队列+二叉树 // 先序 --层次

    原题链接:oj3344 数据结构实验之二叉树五:层序遍历 Description 已知一个按先序输入的字符序列,如abd,eg,cf,(其中,表示空结点).请建立二叉树并求二叉树的层次遍历序列. In ...

  2. 3344 数据结构实验之二叉树五:层序遍历

    数据结构实验之二叉树五:层序遍历 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 已知一个按先序输入的字符序列,如abd,,e ...

  3. 数据结构实验之二叉树五:层序遍历(STL和模拟队列两种方法)

    Description 已知一个按先序输入的字符序列,如abd,eg,cf,(其中,表示空结点).请建立二叉树并求二叉树的层次遍历序列. Input 输入数据有多行,第一行是一个整数t (t<1 ...

  4. bartender一行打印两个二次开发_C++ 智能指针和二叉树:图解层序遍历和逐层打印二叉树...

    作者:apocelipes  链接:https://www.cnblogs.com/apocelipes/p/10758692.html 二叉树是极为常见的数据结构,关于如何遍历其中元素的文章更是数不 ...

  5. 数据结构实验之二叉树五:层序遍历

    题目描述 已知一个按先序输入的字符序列,如abd,,eg,,,cf,,,(其中,表示空结点).请建立二叉树并求二叉树的层次遍历序列. 输入  输入数据有多行,第一行是一个整数t (t<1000) ...

  6. BFS(二)二叉树层序遍历(I、II)、二叉树锯齿形层序遍历、N叉树层序遍历

    目录 102. 二叉树的层序遍历 107. 二叉树的层序遍历 II 103. 二叉树的锯齿形层序遍历 429. N 叉树的层序遍历 102. 二叉树的层序遍历 给你二叉树的根节点 root ,返回其节 ...

  7. 常考数据结构与算法:二叉树的之字形层序遍历

    题目描述 给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该二叉树之字形层序遍历的结果是 [ ...

  8. 牛客题霸 [二叉树的之字形层序遍历] C++题解/答案

    牛客题霸 [二叉树的之字形层序遍历] C++题解/答案 题目描述 给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替) 例如: 给定的二叉树是{3,9,20, ...

  9. 二叉树的之字形层序遍历

    二叉树的之字形层序遍历 1.参考资料 https://www.nowcoder.com/practice/47e1687126fa461e8a3aff8632aa5559 2.题目要求 题目描述 给定 ...

最新文章

  1. Ubuntu 下添加OpenERP command 快捷启动方式
  2. 【Spark篇】---SparkStream初始与应用
  3. oracle的那些事
  4. Android - N级树形结构实现
  5. 【转】PYTHON open/文件操作
  6. 2021年安徽高考英语口试成绩查询,2021高考英语口语考试成绩
  7. 【数据结构与算法】之深入解析“打家劫舍”的求解思路与算法示例
  8. 大端模式小端模式 主机序网络序
  9. teleport 组件的作用_人脸识别综述! 覆盖人脸检测,预处理和特征表示三大核心组件!...
  10. nginx历史版本下载链接
  11. python 超像素分割
  12. 基于视觉SLAM的无人机仿真-px4-gazebo
  13. 下载各种离线地图(包括高德英文版地图)
  14. SAP笔记MM (中文版学习)
  15. 包政讲营销录音(1)
  16. 一文弄懂BIN、HEX、AXF、ELF文件格式的区别
  17. 直接把结果输出到打印机
  18. 【CPU GPU TPU】机器学习扫盲篇
  19. UE4.26源码版学习广域网独立服务器时遇到的客户端运行黑屏问题
  20. MySQL-性能分析语句 show profile和show profiles

热门文章

  1. Electron:想简单了解一下electron-react-boilerplate应用模板
  2. 好压打开压缩包文件名乱码问题一步教你解决
  3. [车联网安全自学篇] Android安全之Android 如何生成APP(APK)「详解」
  4. 使用Android Glide技术实现图片加载和播放视频
  5. 诺基亚2009挑战赛和Ovi Store
  6. 【解决方案】EasyCVR智能安防监控平台在石油能源行业中的应用
  7. 深度:一年举办10000场中老年文娱活动,链接5000个社区,社区天天乐如何成为老年行业中的快公司?
  8. 如何在网页中打开一个本地桌面程序
  9. ASP运行环境的搭建
  10. [Design]平面设计教程-《大师之路》