二叉树的中序遍历

目录

一、前言

二、中序遍历

三、递归

四、迭代


一、前言

        本篇文章主要讲解二叉树的中序遍历,对前序遍历、后序遍历不熟悉的同学可以观看本专栏。

二、中序遍历

        简单来说,前序遍历的遍历思想就是: 左子树 --->根结点 ---> 右子树

图一 中序遍历 

如何在不编程的情况下快速计算二叉树的中序遍历呢?接下来我教给大家一个简单快捷的方法。

图二 小孔穿线法

        这种快速计算方法我给起名为小孔穿线法,中序遍历的小孔穿线法就是在该二叉树的每个节点的下方画一个小孔,然后依次连接起来,如图二所示,所以该二叉树的中序遍历结果为[4、2、5、1、6、3、7]。

        当然该方法是为了让大家不通过编程来进行快速计算的,接下来我将从递归和迭代两种编程方法为大家讲解。(Morris算法本篇文章暂且先不讲,请关注后续)

三、递归

        二叉树遍历,递归思想其实是最简单的方法。中序遍历我们递归的思想就是左子树 --->根结点 ---> 右子树。我直接给伪代码了,不懂的同学可以私信或评论区问我。


struct TreeNode 
{int val;struct TreeNode *left;struct TreeNode *right;
};void  inorder(struct TreeNode* root, int* res, int* resSize)
{if( !root ){return ;}inorder(root->left, res , resSize);res[(*resSize)++] = root->val;inorder(root->right, res, resSize);
}int* inorderTraversal(struct TreeNode* root, int* returnSize) 
{int*    res = malloc(sizeof(int)*100);*returnSize = 0;inorder(root, res, returnSize);return res;   
}

        时间复杂度:o(n)

        空间复杂度:o(1) 

四、迭代

        递归的时候隐式地维护了一个栈,而我们在迭代的时候需要显式地将这个栈模拟出来,其余的实现与细节都相同,具体可以参考下面的代码。


struct TreeNode 
{int val;struct TreeNode *left;struct TreeNode *right;};int* inorderTraversal(struct TreeNode* root, int* returnSize) 
{*returnSize = 0;int*    res = malloc(sizeof(int)*100);struct  TreeNode** stack = malloc(sizeof(struct TreeNode*)*100);int     top = 0;while( root != NULL || top > 0 ){while( root != NULL ){stack[top++] = root;root = root->left;}root = stack[--top];res[(*returnSize)++] = root->val;root = root->right;}return res;
}

        时间复杂度:o(n)

        空间复杂度:o(1) 

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

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

相关文章

车牌号识别系统:PyQT5+QT Designe+crnn/PaddleOCR+YOLO+OpenCV矫正算法。

PyQT5&QT Designecrnn/PaddleOCRYOLO传统OpenCV矫正算法。可视化的车牌识别系统项目。 车牌号识别系统 项目绪论1.项目展示2.视频展示3.整体思路 一、PyQT5 和 QT Designer1.简介2.安装3.使用 二、YOLO检测算法三、OpenCV矫正算法四、crnn/PaddleOCR字符识别算法五、QT界面…

已解决 RuntimeError: No CUDA GPUs are available 亲测有效!!!

已解决 RuntimeError: No CUDA GPUs are available 亲测有效!!! 亲测有效 报错问题解决思路解决方法 报错问题 RuntimeError: No CUDA GPUs are available 这个错误通常发生在尝试在没有CUDA支持的GPU或没有安装NVIDIA GPU的机器上运行基于C…

[Flutter]创建一个私有包并使用

在Flutter中创建一个自己的私有组件(通常称为包或库),并通过Dart的包管理工具pub进行使用。 一、创建一个新的Flutter包 1.使用命令行创建 使用Flutter命令行工具来创建一个新的包: $ flutter create --templatepackage my_pri…

Make3D数据集相关介绍

一、参考资料 Make3d数据集使用方法 二、相关介绍 1. 简介 Make3D 数据集的每帧图像的深度值均由激光雷达进行采集,相较于 Kinect 相机采集的深度信息,该测距仪可以得到室外图像更加精确的深度信息,而且测距范围更大,与普通的…

XORM 框架的使用

1、xorm 1.1、xorm 简介 xorm 是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。 特性 支持 struct 和数据库表之间的灵活映射,并支持自动同步事务支持同时支持原始SQL语句和ORM操作的混合执行使用连写来简化调用支持使用ID, In, Where, Limit,…

设备自动化技术商务咨询

​南京纳恩自动化科技有限公司,成立于 2010年。高新技术企业、软件企业,致力于为客户提供最佳的继电保护、电力监控、智慧用电、工业自动化系统以及基于大数据、云系统的产品解决方案和服务。 自动化行业深耕多年,成就丰富的电力自动化行业经…

2024-05-06 问AI: 介绍一下深度学习中的LSTM网络

文心一言 当谈到深度学习中的LSTM(Long Short-Term Memory)网络时,它是一种特殊的循环神经网络(RNN)架构,旨在解决传统RNN在处理长序列时遇到的梯度消失和梯度爆炸问题。LSTM网络因其能够捕捉序列数据中的…

《网络安全技术 网络安全众测服务要求》

近日,全国网络安全标准化技术委员会发布《网络安全技术 网络安全众测服务要求》(GB/T 43741-2024,以下简称“众测服务要求”),并将在2024年11月1日正式实施。 《众测服务要求》确立了网络安全众测服务的角色及其职责&…

ElasticSearch 与 OpenSearch:拉开性能差距

Elasticsearch 与 OpenSearch:扩大性能差距 对于任何依赖快速、准确搜索数据的组织来说,强大、快速且高效的搜索引擎是至关重要的元素。对于开发人员和架构师来说,选择正确的搜索平台可以极大地影响您的组织提供快速且相关结果的能力。在我们…

【WebGIS实例】(13)MapboxGL 加载地形高程数据

前言 官网示例:Add 3D terrain to a map | Mapbox GL JS | Mapbox 大佬博客:Mapbox GL基础(七):地形数据的处理与加载 (jl1mall.com) 加载Mapbox地形数据 map.once(style.load, () > {map.addSource(mapbox-dem,…

微信小程序如何使用svg矢量图标

微信小程序如何使用自定义SVG矢量图标 在微信小程序中,经常会用到小图标来装饰界面,我们常用的方法就是引用第三方的图标,但会存在收费或者找不到合适的图标,这时候我建议可以自行编写svg图标代码,就可以随心所欲的使…

后台启动HIVE的JDBC连接

后台启动HIVE的JDBC连接 生活就像一杯咖啡,有时苦涩,有时香甜,但都是值得品味的经历。无论遇到什么挑战,记住在每一天的开始,你都有机会给自己倒上一杯清新的力量,为心灵添一抹温暖。勇敢地面对生活的苦与甜…

从零开始学RSA: [WUSTCTF2020]情书等5题

1 [WUSTCTF2020]情书 题目 Premise: Enumerate the alphabet by 0、1、2、..... 、25 Using the RSA system Encryption:0156 0821 1616 0041 0140 2130 1616 0793 Public Key:2537 and 13 Private Key:2537 and 937flag: wctf2020{Decryption}解题 前提:用0、…

【论文泛读】如何进行动力学重构? 神经网络自动编码器结合SINDy发现数据背后蕴含的方程

这一篇文章叫做 数据驱动的坐标发现与方程发现算法。 想回答的问题很简单,“如何根据数据写方程”。 想想牛顿的处境,如何根据各种不同物体下落的数据,写出万有引力的数学公式的。这篇文章就是来做这件事的。当然,这篇论文并没有…

五分钟了解等级保护、风险评估和安全测评三者的区别和联系?

等级保护 基本概念:网络安全等级保护是指对国家秘密信息、法人和其他组织和公民的专有信息以及公开信息和存储、传输、处理这些信息的信息系统分等级实行安全保护,对信息系统中使用的安全产品实行按等级管理,对信息系统中发生的信息安全事件…

vs配置cplex12.10

1.创建c空项目 2.修改运行环境 为release以及x64 3.创建cpp文件 4.鼠标右键点击项目中的属性 5.点击c/c,点击第一项常规,配置附加库目录 5.添加文件索引,主要用于把路径导进来 6.这一步要添加的目录与你安装的cplex的目录有关系 F:\program…

【Qt】按钮类控件

文章目录 1 :peach:Push Button:peach:2 :peach:Radio Buttion:peach:3 :peach:Check Box:peach:4 :peach:Tool Button:peach: 1 🍑Push Button🍑 使⽤ QPushButton 表⽰⼀个按钮,这也是当前我们最熟悉的⼀个控件了,QPushButton …

[Algorithm][BFS][最短路问题][迷宫中离入口最近的出口][最小基因变化][单词接龙][为高尔夫比赛砍树]详细讲解

0.原理讲解 最短路径是图里的常见问题本专题主要讲解边权为一的最短路问题 边权全都相同即可,并非只能为一 方法:从起点开始,来一次BFS即可如何找出最短路径是多长呢? 拓展的层数,就是最短路的长度 1.迷宫中离入口最…

在k8s中安装Grafana并对接Prometheus,实现k8s集群监控数据的展示

🐇明明跟你说过:个人主页 🏅个人专栏:《Grafana:让数据说话的魔术师》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、Grafana简介 2、Grafana的重要性与影响力 …

01-基本概念

1. 到底什么是数据结构? 数据结构是指在计算机中组织和存储数据的方式,它涉及到数据元素之间的关系以及对这些关系进行操作的方法。数据结构可以看作是一种将数据组织起来以便有效使用的方式,它关注数据的组织、存储和操作,以及如…