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

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

二叉树的遍历的概念:

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

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

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

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

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

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

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

递归代码实现:

创建二叉树:

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

复制代码
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);
}
相关推荐
嵌入式@秋刀鱼3 小时前
《第四章-筋骨淬炼》 C++修炼生涯笔记(基础篇)数组与函数
开发语言·数据结构·c++·笔记·算法·链表·visual studio code
嵌入式@秋刀鱼3 小时前
《第五章-心法进阶》 C++修炼生涯笔记(基础篇)指针与结构体⭐⭐⭐⭐⭐
c语言·开发语言·数据结构·c++·笔记·算法·visual studio code
泽02024 小时前
C++之list的自我实现
开发语言·数据结构·c++·算法·list
物联网嵌入式小冉学长7 小时前
2.线性表的链式存储-链表
数据结构·链表
顾小玙7 小时前
前缀和:leetcode974--和可被K整除的子数组
数据结构·算法
W说编程8 小时前
算法导论第三章:数据结构艺术与高效实现
c语言·数据结构·算法
hn小菜鸡8 小时前
LeetCode 2917.找出数组中的K-or值
数据结构·算法·leetcode
yield-bytes9 小时前
Java并发进阶系列:深度讨论高并发跳表数据结构ConcurrentSkipListMap的源代码实现(上)
数据结构
好易学·数据结构9 小时前
可视化图解算法51:寻找第K大(数组中的第K个最大的元素)
数据结构·python·算法·leetcode·力扣·牛客网·堆栈
NULL指向我11 小时前
C语言数据结构笔记5:Keil 编译器优化行为_malloc指针内存分配问题
c语言·数据结构·笔记