数据结构与算法之二叉树的先序、中序以及后序遍历

news2024/11/26 7:45:56

什么是遍历

  1. 遍历:按照某种次序把所有结点 都访问一遍

  2. 层次遍历:基于树的层次特性确定的次序规则

    1. 先/中/后序遍历:基于树的递归特性确定的次序规则

image.png

image.png

二叉树的遍历

二叉树的递归特性:

  1. 要么就是个空二叉树
  2. 要么就是有“根节点+左子树+右子树”组成的二叉树

遍历方式

  1. 先序遍历:根左右(NLR)
  2. 中序遍历:左根右(LNR)
  3. 后序遍历:左右根(LRN)

下面是一些遍历方式例图

image.png

image.png

image.png

先序遍历

操作过程:

  1. 若二叉树,则什么都不做;

  2. 若二叉树非空:

    1. 访问根节点
    2. 先序遍历左子树
    3. 先序遍历右子树
/**
 * 二叉树的前序遍历:根左右
 * @param biTree 二叉树
 */
void preOrder(BiTree biTree) {
    //递归结束
    if (biTree == NULL) {
        return;
    }
    printf("%d\t", biTree->data);
    //左子树,因为子树和根都是一样的数据结构所以可以直接递归
    preOrder(biTree->lChild);
    //右子树,因为子树和根都是一样的数据结构所以可以直接递归
    preOrder(biTree->rChild);
}

流程展示(下面中序遍历和后序遍历类似)

VeryCapture_20220530152410.gif

中序遍历

操作过程:

  1. 若二叉树,则什么都不做;

  2. 若二叉树非空:

    1. 先序遍历左子树
    2. 访问根节点
    3. 先序遍历右子树
/**
 * 二叉树的中序遍历:左根右
 * @param biTree 二叉树
 */
void midOrder(BiTree biTree) {
    //递归结束
    if (biTree == NULL) {
        return;
    }
    //左子树,因为子树和根都是一样的数据结构所以可以直接递归
    midOrder(biTree->lChild);
    //根节点data打印
    printf("%d\t", biTree->data);
    //右子树,因为子树和根都是一样的数据结构所以可以直接递归
    midOrder(biTree->rChild);
}

后序遍历

操作过程:

  1. 若二叉树,则什么都不做;

  2. 若二叉树非空:

    1. 先序遍历左子树
    2. 先序遍历右子树
    3. 访问根节点
/**
 * 二叉树的中序遍历:左根右
 * @param biTree 二叉树
 */
void postOrder(BiTree biTree) {
    //递归结束
    if (biTree == NULL) {
        return;
    }
    //左子树,因为子树和根都是一样的数据结构所以可以直接递归
    postOrder(biTree->lChild);
    //右子树,因为子树和根都是一样的数据结构所以可以直接递归
    postOrder(biTree->rChild);
    //根节点data打印
    printf("%d\t", biTree->data);
}

总结

image.png

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

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

相关文章

chatgpt赋能python:Python小游戏教程:打造属于自己的游戏

Python小游戏教程:打造属于自己的游戏 Python小游戏是一个非常有趣的项目,不仅可以锻炼编程基本功,还可以开发出自己独特的小游戏,提高自己在编程领域的实践能力。下面,我会带领大家逐步学习如何用Python打造属于自己…

SpringBoot整合Ip2region获取IP地址和定位

1.Ip2region的介绍 1.1.Ip2region 是什么 ip2region v2.0 - 是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率,提供了众多主流编程语言的 xdb 数据生成和查询客户端实现 。 1.2.Ip2region 特性 1.2.1 标准化的数据格式 每个 ip 数…

记录解决Android Studio下载gradle超时问题

大三学生,2023年3月19号晚,首次下载Android Studio2022版本并新建项目,发现在下载gradle总是连接超时,舍友则没有这个问题,用的是同一个安装包。 查阅文献太多,忘记都有哪些了,就不列出来了&…

MySQL 课后习题解析与笔记——学生选课数据库相关操作

文章目录 📋前言🎯题目解析1️⃣创建数据库2️⃣创建表📑Student 表📑Course 表📑SC 表 🎯完整答案📝最后 📋前言 这篇文章记录一下帮助粉丝朋友一起学习解决的 MySQL 课后习题&…

5款AI应用让你全面感受人工智能的魅力

“ AI 的出现就像燃气机和蒸汽机一样,极大地提高了生产力。” chatGPT ChatGPT 是由 OpenAI 公司开发的一种大型语言模型。 OpenAI 公司成立于 2015年,早期马斯克是该公司的创始人之一。 自 2018 年推出 GTP-1 以来,OpenAI 已经推出了 GPT-…

Power BI Visuals - Candlestick (K线图) 介绍文档

注:本文最初发布于 d-bi.gitee.io (2020年4月), 2023年6月迁移至CSDN 注:本文将简要介绍新的Power BI可视化–Candlestick的使用方法 简介 Candlestick是由本人(Davis ZHANG)使用R语言开发的Power BI可视化, 它将在数日之后(取决于审核的进…

chatgpt赋能python:Python平均值:让你的数据更有说服力

Python平均值:让你的数据更有说服力 作为一个有10年Python编程经验的工程师,我非常熟悉Python程序的各种应用。其中,计算平均值是数据分析中最常用的计算方法之一,而Python作为一种广泛应用的语言,也可以轻松地处理平…

k8s网络模型

前言 通过《Linux网络原理》我们已据备了一定的理论知识。k8s是怎么构建网络模型的呢? 基础知识 交换机和路由器都是网络中常见的设备,它们在网络通信中扮演不同的角色。 交换机(Switch)是一种用于构建局域网(LAN&a…

11 - 守护进程深度分析

---- 整理自狄泰软件唐佐林老师课程 查看所有文章链接:(更新中)Linux系统编程训练营 - 目录 文章目录 1. 会话与终端的关联1.1 思考1.2 新会话关联控制终端的方法1.3 一些相关推论1.4 一些想法1.5 编程实验:会话与终端 2. 守护进程…

SpringSecurity自定义认证

一. 前言 ​ 学习了SpringSecurity的使用,以及跟着源码分析了一遍认证流程,掌握了这个登录认证流程,才能更方便我们做自定义操作。 ​ 下面我们来学习下怎么实现多种登录方式,比如新增加一种邮箱验证码登录的形式,但…

chatgpt赋能python:用Python建立Pipeline-优化你的数据处理流程

用Python建立Pipeline - 优化你的数据处理流程 如果你是一位数据科学家或是数据工程师,那么你一定知道数据处理流程的重要性。数据流程不只是数据的处理和清洗,还包括数据来源的获取以及对数据进行可视化、建模和验证。这个流程可以十分复杂&#xff0c…

solr快速上手:实现从mysql定时自动同步数据(六)

0. 引言 上一章节我们讲解了从msyql同步数据到solr,但是我们每次同步都需要在solr-admin中点击同步按钮,这在生产环境中肯定是不可行的,那么solr是否支持自动化同步了,答案当然是可以,我们今天继续来探索如何实现solr…

虚拟机安装和配置红帽企业版 7.4 操作系统及相关设置

虚拟机安装和配置红帽企业版 7.4 操作系统及相关设置 当安装红帽企业版 7.4 操作系统时,可以按照以下步骤进行配置和设置: 使用 VM16.0 安装软件,打开虚拟机管理程序,并选择创建新的虚拟机。在创建虚拟机的过程中,选…

ChatGPT在线网页版和接口

chat gpt能写公众号文章吗 ChatGPT是一种强大的自然语言生成技术,它可以用来自动生成大量的、质量较高的文本。根据OpenAI官方的演示和使用案例,ChatGPT已经被用于文本摘要、对话生成、语言翻译、文本分类等多种应用场景。 然而,ChatGPT作为…

文本三剑客之 awk

awk Linux/UNIX 系统中,awk 是一个功能强大的编辑工具。逐行读取输入文本 以空格作为分割符,多个空格他会自动压缩成一个空格 AWK信息的读入也是逐行指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理. 1按照命令找指定…

用户档案PDF报表

用户档案PDF报表 理解数据填充的两种方式熟练构造分组报表 熟练构造Chart图形报表实现个人档案的PDF输出 数据填充 我们介绍了如何使用JasperReport来生成简单的文本报表,正式企业开发中动态数据展示也是报表中最重要的一 环,接下来我们共同研究的就是填…

FastCorrect:语音识别快速纠错模型丨RTC Dev Meetup

前言 「语音处理」是实时互动领域中非常重要的一个场景,在声网发起的「RTC Dev Meetup丨语音处理在实时互动领域的技术实践和应用」活动中,来自百度、寰宇科技和依图的技术专家,围绕该话题进行了相关分享。 本文基于微软亚洲研究院主管研究…

chatgpt赋能python:Python应用图标的SEO优化策略

Python应用图标的SEO优化策略 作为一门跨平台解释型编程语言,Python已经成为越来越多企业和开发者的首选语言之一。在Python应用的推广过程中,图标的设计和SEO优化也变得越来越重要。在本文中,我们将探讨Python应用图标的SEO优化策略&#x…

CCE集群切换OBS共享存储方案

目录 一、背景 二、创建PVC 三、同步nfs数据到OBS 四、变更无状态负载数据储存为OBS 五、卸载弹性文件服务SFS(nfs) 一、背景 生产环境CEE集群,每个K8s节点挂载同一个华为云弹性文件服务SFS(可以简单的理解为nfs)。无状态应用通过hostPath…

chatgpt赋能python:Python就业岗位:行业热门,前景广阔

Python 就业岗位:行业热门,前景广阔 作为其中一门最受欢迎的编程语言,Python 经常出现在各个行业的招聘需求中。无论是大企业、初创公司,还是政府机构和非营利组织,都需要 Python 专业人士来应对日益增长的数据和技术…