二叉树链式结构的遍历访问——前中后序

news2024/11/20 3:20:55

最开始接触树的时候,因为并不是二叉树,所以我们并不知道一个节点最多有几个度,所以我们要用链表来实现树的话就需要用孩子兄弟法
在这里插入图片描述
然后我们认识了完全二叉树,因为它是从左到右都满的二叉树,所以我们可以用顺序表(数组)来存储
在这里插入图片描述
但是如果不是完全二叉树的话,用顺序表储存的话就不好,那么又因为他是二叉树了,一个节点做多只有两个度,所以可以用一个结构体(里面包含两个结构体指针,和储存在节点的数)来表示二叉树中的每个节点
在这里插入图片描述
上述代码并不是创建二叉树的方式,现在我们只是手动弄出一个二叉树,方便之后对他结构实现的运用
我们可以把二叉树的每一个子,够看成有,根左子树,右子树。所以二叉树的遍历是递归的
在这里插入图片描述
现在我们用代码来实现这三中二叉树的遍历(递归)
前序遍历:


void PreOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("NULL ");
		return;
	}
	printf("%d ", root->val);
	PreOrder(root->left);
	PreOrder(root->right);
}

在这里插入图片描述

同样的原理——中序遍历:

void InOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("NULL ");
		return;
	}
	InOrder(root->left);
	printf("%d ", root->val);
	InOrder(root->right);
}

同样的原理——后序遍历:

void PostOrder(BTNode* root)
{

	if (root == NULL)
	{
		printf("NULL ");
		return;
	}
	PostOrder(root->left);
	PostOrder(root->right);
	printf("%d ", root->val);

}




打印的结果:
在这里插入图片描述

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


BTNode* BuyNode(BTDataType x)//为每个节点开辟空间
{
	BTNode* tmp = (BTNode*)malloc(sizeof(BTNode));
	if (tmp == NULL)
	{
		perror("malloc fail");
		exit(-1);
	}
	tmp->left = tmp->right = NULL;
	tmp->val = x;
}

void PreOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("NULL ");
		return;
	}
	printf("%d ", root->val);
	PreOrder(root->left);
	PreOrder(root->right);
}
void InOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("NULL ");
		return;
	}
	InOrder(root->left);
	printf("%d ", root->val);
	InOrder(root->right);
}

void PostOrder(BTNode* root)
{

	if (root == NULL)
	{
		printf("NULL ");
		return;
	}
	PostOrder(root->left);
	PostOrder(root->right);
	printf("%d ", root->val);

}
int main()
{
	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;
	node2->left = node3;
	node1->right = node4;
	node4->left = node5;
	node4->right = node6;

	// 二叉树前序遍历
	PreOrder(node1);
	// 二叉树中序遍历
	printf("\n");
	InOrder(node1);
	printf("\n");

	// 二叉树后序遍历
	 PostOrder(node1);

}

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

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

相关文章

【数据结构】二叉树的顺序结构及实现

目录 1. 二叉树的顺序结构 2. 堆的概念及结构 3. 堆的实现 3.1 堆向下调整算法 3.2 堆的创建 3.3 建堆时间复杂度 3.4 堆的插入 3.5 堆的删除 3.6 堆的代码实现 4. 堆的应用 4.1 堆排序 4.2 TOP-K问题 1. 二叉树的顺序结构 普通的二叉树是不适合用数组来存储的&…

【算法-动态规划】贝尔曼福特算法

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

面试经典 150 题 2 —(双指针)— 392. 判断子序列

392. 判断子序列 方法一 class Solution { public:bool isSubsequence(string s, string t) {int top 0, bottom 0;int tlength t.length(), slength s.length();if(slength 0){return true;}while(top < tlength){if(s[bottom] t[top]){bottom;}if(bottom slength)…

C++DAY43

#include <iostream>using namespace std;//封装 沙发 类 class Sofa { private:string living; public:Sofa(){cout << "沙发的无参构造函数" << endl;}Sofa(string l):living(l){cout << "沙发的有参构造函数" << endl;}v…

创建一个基本的win32窗口

1.建立一个窗口的基本步骤 &#xff08;1&#xff09;向系统注册一个窗体类 &#xff08;2&#xff09;根据窗体类创建窗口 &#xff08;3&#xff09;进入消息循环 2.程序结构 (1)主函数的输入参数 int WINAPI WinMain( HISTANCE hInstance,//当前窗口的句柄 HINSTANCE hPr…

10.9~10.10

触发器方程 触发器之间的转化 触发器需要输入和输出 对于D触发器&#xff0c;只需要D信号的输入 对于jk触发器&#xff0c;至少需要原状态的与非信号&#xff0c;并且需要j,k信号 假如确定y2,则D触发器需要什么D信号&#xff0c;是需要卡诺图确定 j-k触发器需要什么jk信号…

NewStarCTF 2023 公开赛道 WEEK2|Crypto

目录 T1.滴啤 T2.不止一个pi T3.halfcandecode T4.Rotate Xor T5.broadcast T6.partial decrypt T1.滴啤 下载题目附件&#xff0c;我们获得到以下代码。 from Crypto.Util.number import * import gmpy2 from flag import flag def gen_prime(number):p getPrime(numb…

【java基础学习】之环境变量的配置

java环境变量的配置 第一步&#xff1a;打开电脑->属性->高级系统设置 第二步&#xff1a;点开环境变量 第三步&#xff1a;找到path&#xff08;windows系统执行命令时要搜寻的路径&#xff09; 将按照的bin路径放到新增到path下面&#xff1a; 运行cmd&#xff0c;然…

切换至root用户时,命令提示符颜色为白色,如何修改?

当我切换至root用户时&#xff0c;发现命令提示符里的内容全部为白色&#xff0c;如图所示&#xff1a; 这让人看着不愉快&#xff0c;上网先搜索下解决方案&#xff1a;【切换到 root 账户字体全是白的&#xff0c;怎么改颜色啊】- 百度贴吧&#xff0c;但是这个解决方案只是…

Spring 环境安装配置

Spring 环境安装配置 目录 Spring 环境安装配置 第1步 - 安装Java开发工具包&#xff08;JDK&#xff09;&#xff1a; 步骤2 - 安装Apache通用日志API&#xff1a; 第3步 - 安装Eclipse集成开发环境 第4步 - 安装Spring框架库 本教程将指导您如何准备开发环境并使用 Spring …

【算法-动态规划】不同路径

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

python sqlalchemy(ORM)- 01 简单使用

[doc] 简介 sqlalchemy 是python操作sql数据库的工具&#xff0c;是一个对象关系映射的框架&#xff1b;在python中提供高效、高性能的数据库访问&#xff0c;企业级的数据持久化模式&#xff1b;pypi 地址sqlalchemy官网 sqlalchemy架构 sql操作是独立于ORM操作的&#xf…

选择智慧公厕解决方案,开创智慧城市公共厕所新时代

在城市建设和发展中&#xff0c;公厕作为一个不可或缺的城市基础设施&#xff0c;直接关系到城市形象的提升和居民生活品质的改善。然而&#xff0c;传统的公厕存在着管理不便、卫生状况差、设施陈旧等问题。为了解决这些困扰着城市发展的难题&#xff0c;智慧公厕源头厂家广州…

ABB机器人的MoveL和MoveJ运动指令基本功能介绍

ABB机器人的MoveL和MoveJ运动指令基本功能介绍 MoveL指令 该指令是一种线性的运动指令&#xff0c;通过该指令可以使机器人工具末端TCP点以恒定的速度直线移动到目标点位置。 运动的特点&#xff1a;  路径确定且唯一&#xff1b;  始终是直线 应用场景&#xff1a;弧焊…

chatglm.cpp使用手记

chatglm.cpp AI搭建 1.环境准备2 githup下载项目3 安装加载和量化拥抱面模型所需的软件包4 准备编译环境5 开始编译项目6 模型转换7 CLI 验证8 web 验证9 api验证10 遗留问题 1.环境准备 cat /etc/os-release NAME"Ubuntu" VERSION"20.04 LTS (Focal Fossa)&qu…

新手教程!制作电子期刊的必备网站

随着数字时代的到来&#xff0c;电子期刊已经成为一种重要的阅读方式。无论是为了学习、工作还是娱乐&#xff0c;电子期刊都以其方便、快捷、多样化的特点&#xff0c;越来越受到人们的欢迎。 对于想要制作电子期刊的新手来说&#xff0c;首先需要找到一些专业的工具来制作电子…

构建图像金字塔:探索 OpenCV 的尺度变换技术

构建图像金字塔&#xff1a;探索 OpenCV 的尺度变换技术 引言什么是图像金字塔&#xff1f;为什么需要图像金字塔&#xff1f;构建高斯金字塔构建拉普拉斯金字塔图像金字塔的应用示例&#xff1a;在不同尺度下检测图像中的边缘 结论 引言 在计算机视觉领域&#xff0c;图像金字…

关于链表指针的深刻理解

以下列代码为例 //终于给我搞清楚指针的指向究竟是怎么看的了// 按编号对职工记录进行递增排序 void sortById(List* list) {Employee* p, * q, * tail NULL;// tail 变量则是一个边界指针&#xff0c;初始值为 NULL。while (list->head->next ! tail) // tail 变量则是…

elasticsearch(ES)分布式搜索引擎03——(RestClient查询文档,ES旅游案例实战)

目录 3.RestClient查询文档3.1.快速入门3.1.1.发起查询请求3.1.2.解析响应3.1.3.完整代码3.1.4.小结 3.2.match查询3.3.精确查询3.4.布尔查询3.5.排序、分页3.6.高亮3.6.1.高亮请求构建3.6.2.高亮结果解析 4.旅游案例4.1.酒店搜索和分页4.1.1.需求分析4.1.2.定义实体类4.1.3.定…

本地安装多个node版本,gvnm来安装切换使用。vue2和vue3对node版本要求不一样

首先&#xff0c;本地下载安装gvnm https://github.com/Kenshin/gnvm.。 里面有安装使用方式。 使用gvnm 来管理切换本地node 版本。 2&#xff0c;切换为高版本node,或是在vue2项目package.json 启动打包的时候 配置修改。就无需再切换低版本node 来启动vue2项目了 "s…