五分钟C语言数据结构 之 二叉树层次遍历
时间:2022-07-24
本文章向大家介绍五分钟C语言数据结构 之 二叉树层次遍历,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
五分钟C语言实现常见数据结构
今天的内容分享的是二叉树层次遍历
二叉树层次遍历
二叉树的遍历方式主要由先序遍历、中序遍历和后续遍历,然后就是层次遍历
将先序遍历、中序遍历和后续遍历进行了简单介绍和C编码之后,进行到了最后的二叉树遍历-层次遍历。层次遍历和之前的方式不一样,就是简单的一层一层的去遍历.
后序遍历过程
借助队列,遍历从根结点开始,首先将根结点入队,然后开始执行循环:结点出队、访问该结点、其左右儿子入队,直到结点为空
下面借助一幅图来描述其遍历过程:
代码实现
二叉树的层次遍历利用上述的思路进行C语言代码实现:
树形结构按照上述树形结构进行初始化
#include <stdio.h>
#include <stdlib.h>
#define ElementType int
//初始化队头和队尾指针
int front = 0, rear = 0;
typedef struct BinTNode{
ElementType data;
struct BinTNode * left;
struct BinTNode * right;
}BinTNode, *BinTree;
BinTNode * CreateBinTree(BinTNode *T) {
T=(BinTNode*)malloc(sizeof(BinTNode));
T->data='A';
T->left=(BinTNode*)malloc(sizeof(BinTNode));
T->left->data='B';
T->right=(BinTNode*)malloc(sizeof(BinTNode));
T->right->data='C';
T->left->left=(BinTNode*)malloc(sizeof(BinTNode));
T->left->left->data='D';
T->left->right=(BinTNode*)malloc(sizeof(BinTNode));
T->left->right->data='E';
T->left->right->left=NULL;
T->left->right->right=NULL;
T->left->left->left=(BinTNode*)malloc(sizeof(BinTNode));
T->left->left->left->data='H';
T->left->left->left->left=NULL;
T->left->left->left->right=NULL;
T->left->left->right=(BinTNode*)malloc(sizeof(BinTNode));
T->left->left->right->data='I';
T->left->left->right->left=NULL;
T->left->left->right->right=NULL;
T->right->left=(BinTNode*)malloc(sizeof(BinTNode));
T->right->left->data='F';
T->right->left->left=NULL;
T->right->left->right=NULL;
T->right->right=(BinTNode*)malloc(sizeof(BinTNode));
T->right->right->data='G';
T->right->right->left=NULL;
T->right->right->right=NULL;
return T;
}
//入队
void EnQueue(BinTNode ** queue,BinTNode * elem) {
queue[rear++] = elem;
}
//出队
BinTNode* DeQueue(BinTNode** queue) {
return queue[front++];
}
//输出
void printElement(BinTNode * elem) {
printf("%c ",elem->data);
}
void levelOrderTraverse(BinTNode * tree) {
BinTNode * T;
BinTree queue[20]; // 定义队列
EnQueue(queue, tree); // 初始化,根结点入队
while(front < rear) { // 队列不为空
T = DeQueue(queue); // 结点出队
printElement(T);
// 将出队的结点左右孩子依次入队
if (T->left!= NULL) {
EnQueue(queue, T->left);
}
if (T->right!= NULL) {
EnQueue(queue, T->right);
}
}
}
int main() {
BinTNode * tree;
tree = CreateBinTree(tree);
printf("层次遍历: ");
levelOrderTraverse(tree);
printf("n");
return 0;
}
执行结果
层次遍历: A B C D E F G H I
后续会将更多的数据结构用C语言代码实现,欢迎大家关注!
作者:Johngo
图片:凡科快图
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- laravel实现上传图片并在页面显示的例子
- php实现大文件断点续传下载实例代码
- Laravel第三方包报class not found的解决方法
- 使用laravel的migrate创建数据表的方法
- 解决laravel session失效的问题
- php7下的filesize函数
- PHP-FPM 设置多pool及配置文件重写操作示例
- laravel实现登录时监听事件,添加登录用户的记录方法
- php更新cookie内容的详细方法
- php实现映射操作实例详解
- Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
- yii框架数据库关联查询操作示例
- laravel-admin的多级联动方法
- Laravel数据库读写分离配置的方法
- php给数组赋值的实例方法