二叉树的前,中,后序遍历

我们来了解一下二叉树的遍历,话不多说

二叉树的遍历的概念:

二叉树有四种遍历方式,分别为前序遍历,中序遍历,后序遍历和层序遍历,但我们今天谈谈前三种,并实现它

前序遍历: 按照根,左子树,右子树的顺序进行遍历,方便记忆:根左右

中序遍历: 按照左子树,根,右子树的顺序进行遍历,方便记忆:左根右

后序遍历: 按照左子树,右子树,根的顺序进行遍历,方便记忆:左右根

注意:对于左右子树,是相对于每个根结点来说的,遍历时必须直到最后为空时,再往上返回

看了概念依然会有很多人不解(包括我),所以我们接下来来用中序遍历的例子帮助我们更好地理解

根据中序遍历的左根右的顺序,和上图的方向,我们可以写出中序遍历的顺序结构形式了:

递归代码实现:

创建二叉树:

我们定义数据域和指针域,指针域为树的左右结点

typedef int BTDataType;
typedef struct BinaryTreeNode
{BTDataType data;//数据域struct BinaryTreeNode* left;struct BinaryTreeNode* right;
}BTNode;

前中后序遍历:

我们通过中序遍历发现当它往下调用完之后会往上返回,这符合递归的调用的方式

//前序遍历--根左右
void PreOrder(BTNode* root)
{if (root == NULL)//递归函数的出口{printf("NULL ");return;}printf("%d ", root->data);PreOrder(root->left);PreOrder(root->right);
}
//中序遍历--左根右
void MidOrder(BTNode* root)
{if (root == NULL)//递归函数的出口{printf("NULL ");return;}MidOrder(root->left);printf("%d ", root->data);MidOrder(root->right);
}
//后序遍历--左右根
void AftOrder(BTNode* root)
{if (root == NULL)//递归函数的出口{printf("NULL ");return;}AftOrder(root->left);AftOrder(root->right);printf("%d ", root->data);
}

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

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

相关文章

Linux网站搭建(新手必看)

1.宝塔Linux面板的功能 宝塔面板是一款服务器管理软件,可以帮助用户建立网站,一键配置服务器环境,使得用户通过web界面就可以轻松的管理安装所用的服务器软件。 2. 宝塔Linux面板的安装 宝塔官网地址:宝塔面板 - 简单好用的Linu…

secp256k1的模数P是如何选择的?

在区块链和现代密码学中,secp256k1 椭圆曲线以其高安全性和高效运算性能而著称。你可能注意到,secp256k1 的曲线方程为 而其中的模数 p 被定义为 那么,为何会选择这样一个看似复杂的数呢?本文将从多个角度为你详细解析这一选择背后…

本地文生图使用插件(Stable Diffusion)

1. 插件下载(github) 1.1 直接Avaliable中点击安装(方案一) 1.2 Install from URL中输入URL(方案二) 1.3 直接下载复制到extensions目录(方案三) 2. 模型下载(Huggingf…

鸿蒙-全屏播放页面(使用相对布局)---持续更新中

最终实现效果图: 实现步骤 创建FullScreenPlay.ets全品播放页面 并将其修改为启动页面。 全屏播放,屏幕必然横过来,所以要将窗口横过来。 编辑 src/main/ets/entryability/EntryAbility.ets 若写在/EntryAbility.ets中,则所有…

C++ 多线程简要讲解

std::thread是 C11 标准库中用于多线程编程的核心类,提供线程的创建、管理和同步功能。下面我们一一讲解。 一.构造函数 官网的构造函数如下: 1.默认构造函数和线程创建 thread() noexcept; 作用:创建一个 std::thread 对象,但…

每天认识一个设计模式-建造者模式:复杂对象的“装配式革命“

一、前言 在软件开发的广袤领域中,随着项目规模日益庞大、业务逻辑愈发复杂,对象的创建过程也变得千头万绪。 早期简单的对象创建方式,在面对复杂对象时,逐渐显露出代码臃肿、耦合度高、可维护性差等弊端,设计模式的…

动态IP与静态IP该如何选?

一、当IP地址成为"网络身份" 2023年亚马逊封号潮中,某杭州卖家因登录IP频繁切换(早8点在纽约,午间瞬移到东京),触发平台风控导致账号冻结。这类"时空错乱症"揭示了跨境电商的生存法则&#xff1a…

蓝桥与力扣刷题(蓝桥 蓝桥骑士)

题目:小明是蓝桥王国的骑士,他喜欢不断突破自我。 这天蓝桥国王给他安排了 N 个对手,他们的战力值分别为 a1,a2,...,an,且按顺序阻挡在小明的前方。对于这些对手小明可以选择挑战,也可以选择避战。 身为高傲的骑士&a…

Linux--文件

ok,我们今天了解一下Linux中的文件 理解“文件” 狭义理解 ⽂件在磁盘⾥磁盘是永久性存储介质,因此⽂件在磁盘上的存储是永久性的磁盘是外设(即是输出设备也是输⼊设备)磁盘上的⽂件本质是对⽂件的所有操作,都是对外…

Linux-数据结构-哈夫曼树-哈希表-内核链表

一.哈夫曼树 哈夫曼树(Huffman Tree)是一种特殊的二叉树,其定义和原理如下: 【1】定义 哈夫曼树是一种带权路径长度最短的二叉树。给定一组权值,将这些权值作为叶子节点的权值构造一棵二叉树,若该树的带…

前端抽象化,打破框架枷锁:统一路由的设计

个人博客原文地址 此文章并不适合初级前端来看,它是抽象的架构设计,需要一定的TS基础和抽象思维,若带着思考的读完本文章相信会让你感到充实 当然你也可以复制,然后在自己项目中去实现它,然后用起来 只要你是在写前端…

Docker 搭建部署 仓库的搭建以及网络设置

安装docker 一、关闭防火墙和SELinux 1.1systemctl stop firewalld 1.2setenfoce 0 二、配置内核转发以及网桥过滤 2.1vi /etc/sysctl.d/k8s.conf [rootopeneuler system]# vi /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-ip…

OSPF五种报文分析(仅部分比较重要的)

OSPF五种报文分别是: hello报文,DBD数据库描述报文,LSR链路状态请求报文,LSU链路状态更新报文,LSACK链路状态确认包 以下是这五种报文的详细解读: 1. Hello报文 作用: 用于邻居的发现、建立和…

【测试开发】OKR 小程序端黑盒测试报告

【测试报告】OKR 小程序端 项目名称版本号测试负责人测试完成日期联系方式OKR 小程序端4.0马铭胜2025-03-2515362558972 1、项目背景 1.1 OKR 用户端 在如今这个快节奏的时代中,个人和组织的成长往往依赖于清晰、明确且意义深远的目标。然而,如何设定…

【C++】内存模型分析

在 C 语言中,程序运行时的内存通常被划分为以下几个区域: 代码区(Text Segment)常量区(Constant Segment)全局/静态区(Data Segment,包含静态数据段和 BSS 段)堆区&…

关于解决Ubuntu终端及系统字体大小的问题

在Ubuntu中调整终端和系统字体大小可以通过以下方法(可能不仅仅只是这几种)实现: 1. 调整系统字体大小 打开终端并输入以下命令,安装GNOME Tweaks,等待安装完成: sudo apt install gnome-tweaks 接着进行…

java8循环解压zip文件---实现Excel文件数据追加

java8循环追加Excel数据 实际遇到问题:定期获取zip文件,zip文件内有几个固定模板的Excel文件,有的Excel文件可能还包含多个sheet。 有段时间一次性获取到好几个zip包,需要将这些包都解压,并且按照不同的文件名、sheet进…

内网渗透技术 Docker逃逸技术(提权)研究 CSMSF

目录 如何通过上传的webshell判断当前环境是否是物理环境还是Docker环境 方法一:检查文件系统 方法二:查看进程 方法三:检查网络配置 方法四:检查环境变量 方法五:检查挂载点 总结 2. 如果是Docker环境&#x…

MTK平台 Android12-Android13 默认搜狗输入法

系统默认搜狗输入法功能实现 文章目录 需求:场景 参考资料需求实现内置搜狗输入法配置第三方apk .mk 和 搜狗安装包,不可卸载方式搜狗输入法module 配置到系统device.mk 中去 设置搜狗输入法为默认输入法给输入法授权,默认所有权限 总结思考 …

一周掌握Flutter开发--8. 调试与性能优化(上)

文章目录 8. 调试与性能优化核心技能8.1 使用 Flutter DevTools 分析性能8.2 检查 Widget 重绘(debugPaintSizeEnabled)8.3 解决 ListView 卡顿(ListView.builder itemExtent) 其他性能优化技巧8.4 减少 build 方法的调用8.5 使用…