C语言-二叉树的层序遍历
前言
承接上节,树的非递归三种遍历我们使用了栈,今天讲解的树的层序遍历,我们需要使用另外一种数据结构——队列
我们先简单的回忆一下什么是队列
1.队列
概念:一端入元素,另一端出元素的线性表
一端:队尾
另一端:队头
线性表:顺序表,链表
接下来我们就来完成树的层序遍历吧!
1.根结点入队
2.打印根结点的值并判断当前结点是否有左右子结点
若有,则左右依次入队,此时出队一个元素,并访问其左右子结点
若无,则遍历结束
void LevelOrder(TreeNode* T) {//二叉树的层序遍历if (T == NULL)return;TreeNode* Queue[MaxSize];//队列int front, rear;front = rear = 0;//队空TreeNode* p = NULL;//遍历指针//1.让根节点入队rear = (rear + 1) % MaxSize;Queue[rear] = T;while (front != rear) {front = (front + 1) % MaxSize;p = Queue[front];printf("%d ", p->data);if (p->left != NULL) {//判读左孩子rear = (rear + 1) % MaxSize;Queue[rear] = p->left;}if (p->right != NULL) {//判断右孩子rear = (rear + 1) % MaxSize;Queue[rear] = p->right;}}}
完整代码如下
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define MaxSize 20typedef struct TreeNode {int data;struct TreeNode* left;struct TreeNode* right;
}TreeNode;void LevelOrder(TreeNode* T) {//二叉树的层序遍历if (T == NULL)return;TreeNode* Queue[MaxSize];//队列int front, rear;front = rear = 0;//队空TreeNode* p = NULL;//遍历指针//1.让根节点入队rear = (rear + 1) % MaxSize;Queue[rear] = T;while (front != rear) {front = (front + 1) % MaxSize;p = Queue[front];printf("%d ", p->data);if (p->left != NULL) {//判读左孩子rear = (rear + 1) % MaxSize;Queue[rear] = p->left;}if (p->right != NULL) {//判断右孩子rear = (rear + 1) % MaxSize;Queue[rear] = p->right;}}}int main() {TreeNode n1;TreeNode n2;TreeNode n3;TreeNode n4;n1.data = 1;n2.data = 3;n3.data = 5;n4.data = 7;n1.left = &n2;n1.right = &n3;n2.left = &n4;n2.right = NULL;n3.left = NULL;n3.right = NULL;n4.left = NULL;n4.right = NULL;printf("层序遍历为:");LevelOrder(&n1);return 0;
}
李白说得好啊:这篇文章写的这真不错,确定不给个关注&点赞!
C语言-二叉树的层序遍历相关推荐
- BFS和DFS两种方式实现二叉树的层序遍历
二叉树文章系列: 二叉树的前序遍历 二叉树的中序遍历 二叉树的后序遍历 二叉树的层序遍历 二叉树的前序.中序.后序.层序遍历[解法完整版] 本文目录 前言 一.题目 二.思路分析 解法一:广度优先搜索 ...
- 二叉树的层序遍历 II
二叉树的层序遍历 II 给定一个二叉树,返回其节点值自底向上的层序遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,null,15,7] ...
- [力扣] 二叉树的层序遍历
[力扣] 二叉树的层序遍历 广度优先算法,遍历每一层的节点 例题: 102. 二叉树的层序遍历 # Definition for a binary tree node. # class TreeNod ...
- 算法--- 二叉树的层序遍历 II
题目 二叉树的层序遍历 II 给定一个二叉树,返回其节点值自底向上的层序遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如: 给定二叉树 [3,9,20,null,null,15, ...
- 二叉树的层序遍历_NC15 求二叉树的层序遍历
NC15 求二叉树的层序遍历 考过的企业 - 小米 题目描述 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如:给定的二叉树是{3,9,20,#,#,15,7},该二叉树 ...
- Leetcode 102. Binary Tree Level Order Traversal(二叉树的层序遍历)
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- 一次字节面试,被二叉树的层序遍历捏爆了
前言 大家好,我是bigsai,在数据结构与算法中,二叉树无论是考研.笔试都是非常高频的考点内容,在二叉树中,二叉树的遍历又是非常重要的知识点,今天给大家讲讲二叉树的层序遍历. 这部分很多人可能会但是 ...
- LeetCode 102二叉树的层序遍历103二叉树锯齿形遍历104二叉树的最大深度
微信搜一搜:bigsai 大家都在关注的刷题.学习数据结构和算法宝藏项目 关注回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 97交错字符串(动态规划) LeetCode 98验证 ...
- 二叉树的层序遍历算法 + 打印二叉树所有最左边的元素(算法)
二叉树的层序遍历算法 + 打印二叉树所有最左边的元素(算法) 层序遍历 /** * 树结构定义 */ private static class BinaryNode<T> {BinaryN ...
最新文章
- 首字母大写 -freeCodeCamp
- php mysql增删改查实例_php连接数据库实现用户数据的增删改查实例
- Android开发--TableLayout的应用
- 老鼠实验中老鼠的数量变化曲线
- UT源码_105032014033
- 电路 第五版 第二章 电阻电路的等效变换
- python json数组解析_Python读取JSON数据操作实例解析
- python查找客户总金额_该程序查找需要支付给所有表现良好的Python的最低金额
- 外部类、内部类、局部内部类、匿名类(Java)
- Windows服务器放多个网站,测试无数次终于成功了,Windows服务器同时安装多个版本的MySQL的方法!...
- apache安装步骤(redhat)
- 自学编程,如何找到自己的第一份程序员工作?
- STM32F072在8M下的软件延时
- 大大学校园计算机市场分析,Acer笔记本计算机营销策略分析以大学生市场为例.doc...
- HTML中的元素分类
- 中国的ruby on rails 视频
- [Pandas] 数据形状df.shape
- nofollow是什么意思,nofollow标签的作用是什么?
- Ext Gwt 实用例子--类似meebo的聊天界面
- python 使用sk_learn :ValueError: Expected 2D array, got 1D array instead