二叉树链式结构的前序、中序、后序、层序遍历

文章目录

  • 一、二叉树创建
  • 二、前序遍历
    • 概念以及解释
    • 代码
  • 三、中序遍历
    • 概念及解释
    • 代码
  • 四、后序遍历
    • 概念及解释
    • 代码
  • 五、层序遍历
    • 概念及解释
    • 代码

一、二叉树创建

&mesp; 实现二叉树的遍历,我们要先手搓出一个二叉树,在次基础上实现二叉树的前序、中序、后序、层序遍历。


创建二叉树节点的结构体,包括该节点的值,以及该节点的左节点和右节点。

typedef int BTDataType;typedef struct BinaryTreeNode
{BTDataType data;struct BinaryTreeNode* left;struct BinaryTreeNode* right;
}BTNode;

创建一个函数BinaryTreeCreate,在这个函数内手搓出一棵二叉树
//申请节点
BTNode* BuyNode(int x)
{BTNode* node = (BTNode*)malloc(sizeof(BTNode));if (node == NULL){perror("malloc: BuyNode");return 0;}node->data = x;node->left = node->right = NULL;
}//二叉树
BTNode* BinaryTreeCreate()
{//创建6个节点BTNode* node1 = BuyNode(1);BTNode* node2 = BuyNode(2);BTNode* node3 = BuyNode(3);BTNode* node4 = BuyNode(4);BTNode* node5 = BuyNode(5);BTNode* node6 = BuyNode(6);node1->left = node2;//1的左节点是2node1->right = node4;//1的右节点是4node2->left = node3;//2的左节点是3node4->left = node5;//4的左节点是5node4->right = node6;//4的右节点是6return node1;
}


下面是二叉树展示图
在这里插入图片描述
                      前序、中序、后序遍历均已递归方式来实现

二、前序遍历

概念以及解释

  前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点的操作发生在遍历其左右子树之前。
  前序遍历打印顺序为:根、左、右
在这里插入图片描述

代码

// 二叉树前序遍历 (根  左  右)
void  BinaryTreePrevOrder(BTNode* root)
{if (root == NULL){printf("N ");//为空就打印 Nreturn 0;}printf("%d ", root->data);//先打印根节点BinaryTreePrevOrder(root->left); //递归遍历左子树BinaryTreePrevOrder(root->right);//递归遍历右子树
}

三、中序遍历

概念及解释

  中序遍历(Inorder Traversal)——访问根结点的操作发生在遍历其左右子树之中(间)。
  中序遍历打印顺序为:左、根、右
在这里插入图片描述

代码

void BinaryTreeInOrder(BTNode* root)
{if (root == NULL){printf("N ");return 0;}BinaryTreeInOrder(root->left);//递归遍历左子树printf("%d ", root->data);//打印根节点BinaryTreeInOrder(root->right);//递归遍历右子树
}

四、后序遍历

概念及解释

&rmsp;&emsp**;后序遍历**(Postorder Traversal)——访问根结点的操作发生在遍历其左右子树之后。
  后序遍历的顺序为左、右、根
在这里插入图片描述

代码

// 二叉树后序遍历
void BinaryTreePostOrder(BTNode* root)
{if (root == NULL){printf("N ");return 0;}BinaryTreePostOrder(root->left);BinaryTreePostOrder(root->right);printf("%d ", root->data);
}

五、层序遍历

概念及解释

  层序遍历:除了先序遍历、中序遍历、后序遍历外,还可以对二叉树进行层序遍历。设二叉树的根结点所在层数为1,层序遍历就是从所在二叉树的根结点出发,首先访问第一层的树根结点,然后从左到右访问第2层上的结点,接着是第三层的结点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。


  层序遍历在图形上比前面三种遍历要清晰明了的多,但是在实现上就比较复杂了。他的实现需要用到队列的实现,队列的相关代码在前的博客中已经详细的介绍过了,所以这里我们直接运用。
队列的实现代码:队列的实现
在这里插入图片描述
在这里插入图片描述

代码

// 层序遍历
void BinaryTreeLevelOrder(BTNode* root)
{Queue q;QueueInit(&q);//初始化链表if (root != NULL){QueuePush(&q, root);//插入链表}while (!QueueEmpty(&q)){BTNode* top = QueueFront(&q);//取头节点QueuePop(&q);//头节点出队列printf("%d ", top->data);if (top->left){QueuePush(&q, top->left);//插入队列}if (top->right){QueuePush(&q, top->right);//插入队列}}printf("\n");QueueDestory(&q);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/20454.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【RLHF个人笔记】RLHF:Reinforcement Learning from Human Feedback具体过程

【RLHF个人笔记】RLHF:Reinforcement Learning from Human Feedback具体过程 RLHF训练的三个步骤步骤1:收集数据与有监督训练策略步骤2:收集数据训练奖励模型步骤3:结合奖励模型利用强化学习算法如PPO算法来优化策略 参考内容 RLHF训练的三个…

今年一定要做的副业兼职,1篇文章收入600,批量操作收入翻倍

随着公众号开放公域流量,流量主收入迅速攀升,吸引了众多投资者纷纷涌入这一领域,通过流量主赚取了丰厚的利润。上周,我曾向大家介绍了一些借助公众号流量主实现盈利的策略。 然而,公众号的盈利途径远不止流量主一种。…

数据库(14)——DQL排序查询

DQL排序查询语法 SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2; 排序方式 ASC:升序 DESC:降序 注:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。如果不写排序方式默…

图像处理ASIC设计方法 笔记27 红外非均匀校正的两点定标校正算法

非均匀性校正(Non-Uniformity Correction, NUC)是一种在图像处理和传感器校准中常用的技术,用于改善图像传感器(如CCD或CMOS相机)的输出质量。这种校正主要针对传感器在不同像素之间可能存在的响应差异,这些差异可能是由于制造过程中的微小不完美导致的。 基本原理: 响应…

MAB规范(2):Introduction 介绍

Chapter1 Introduction 1.1 指南目的 MathWorks咨询委员会(MAB)指南规定了Simulink和Stateflow建模的重要基本规则。这些建模指南的总体目的是让建模者和控制系统模型的使用者能够简单、共同地理解。 指南的主要目标是: • 可读性  提高…

CentOS8安装opensips 3.5

环境:阿里云 操作系统CentOS8.5 依赖包安装: libmicrohttpd cd /usr/local/src wget https://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-latest.tar.gz tar vzxf libmicrohttpd-latest.tar.gz cd libmicrohttpd-1.0.1/./configure make make …

联芸科技偏高的关联交易:业绩波动性明显,海康威视曾拥有一票否决

《港湾商业观察》施子夫 5月31日,上交所上市审核委员会将召开2024年第14次审议会议,届时将审议联芸科技(杭州)股份有限公司招股书(以下简称,联芸科技)的首发上会事项。 据悉,此次系…

Github 2024-05-31 Java开源项目日报 Top10

根据Github Trendings的统计,今日(2024-05-31统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目10TypeScript项目1JavaGuide - Java 程序员学习和面试指南 创建周期:2118 天开发语言:Java协议类型:Apache License 2.0Star数量:1…

Rust 第三方库创建和导入(cargo --lib)

前言 日常开发过程中,难免会有一些工具方法,多个项目之间可能会重复使用。 所以将这些方法集成到一个第三方包中方便后期维护和管理, 比如工具函数如果需要修改,多个项目可能每个都需要改代码, 抽离到单独的包中只需要…

SG7050EEN差分晶体振荡器:为5G路由器提供卓越的时钟源

随着5G技术的快速发展,5G路由器作为连接高速网络的重要设备,正迅速普及。为了确保5G路由器在高宽带和低延迟的网络环境中表现出色,选择一款高性能的晶体振荡器至关重要。爱普生推出的SG7050EEN差分晶体振荡器,以其高精度、低相位噪…

【linux软件基础知识】链表数据结构

双向循环链表 新链表是用LIST_HEAD(list_name)宏创建的。如上图中的(b)空链表所示,它申明类型为 list head的变量name,该变量作为新链表头的占位符。LIST_HEAD(list_name)宏还初始化 list head数据结构的 prev和next 字段,让它们指向list_name 变量本身。代码如下 #define…

0基础学习Elasticsearch-Quick start

文章目录 1 背景2 前言3 快速部署ES4 快速部署Kibana5 发送请求给ES5.1 打开Kibana控制台5.2 通过REST API发送请求5.3 通过curl发送请求5.4 添加数据5.4.1 添加单个document5.4.2 添加多个document 5.5 搜索数据5.5.1 搜索所有documents5.5.2 match查询 6 总结 1 背景 因电商项…

【算法】模拟算法——外观数组(medium)

题解:模拟算法——外观数组(medium) 目录 1.题目2.题解3.参考代码4.总结 1.题目 题目链接:LINK 2.题解 首先应该理解题意: 就是开始给你一个字符串,然后你对其进行描述。 描述规则是:连续的数字为一组,…

一、大模型推理

https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md https://github.com/hiyouga/LLaMA-Factory/blob/main/examples/README_zh.md 安装 v7.1 https://github.com/hiyouga/LLaMA-Factory/releases/tag/v0.7.1 git clone --depth 1 https://github.com/hiyoug…

docker 快速搭建django项目环境(DockerFile)文件基础搭建

首先需要搭建好docker环境,docker环境就不在这里叙述,如果想学在评论区留言小编后期更新由linux系统到docker的安装做一个详细的教程。 下面我们开始今天的重点: 1、第一步:我们在任意(linux)路径下创建Do…

【设计模式深度剖析】【B】【结构型】【对比】| 主要区别包装的不同

👈️上一篇:享元模式 回 顾:结构型设计模式 1.代理模式👈️ 2.装饰器模式👈️ 3.适配器模式👈️ 4.组合模式👈️ 5.桥接模式👈️ 6.外观模式👈️ 7.享元模式&#x…

jmeter性能测试用例提取

性能测试用例提取参考(根据单、混合场景、模块、运行时间、优先级)去考虑 Tips:用例提取和用例设计不一样 后期可以结合性能测试用例设计(设置线程数、时间、循环、同步定时器等等)来做性能测试

K210视觉识别模块学习笔记4: 训练与使用自己的模型_识别字母

今日开始学习K210视觉识别模块: 模型训练与使用_识别字母 亚博智能的K210视觉识别模块...... 固件库: maixpy_v0.6.2_52_gb1a1c5c5d_minimum_with_ide_support.bin 文章提供测试代码讲解、完整代码贴出、测试效果图、测试工程下载 这里也算是正式开始进入到视觉识别的领域了…

通信网优:薪资从3k-20k究竟要多久?

随着华为中标结果的不断公布,通信网优行业有了新变化。各大通信公司关于今年的网优业务市场份额也陆续公布,从目前的中标结果来看 杭州东信网络技术有限公司和南京嘉环科技股份有限公司并列排名第一,信科通信科技有限公司排名第三。而北京电旗…

ABP框架+Mysql(三)

创建,更新和删除图书 创建新书籍 创建 modal form 在 Acme.BookStore.Web 项目的 Pages/Books 目录下新建一个 CreateModal.cshtml Razor页面: CreateModal.cshtml.cs 打开 CreateModal.cshtml.cs 代码文件(CreateModalModel 类),替换成以下代码: using System.Threading.…