数据结构:线索二叉树的创建与遍历 完整代码

数据结构-线索二叉树(中序线索二叉树及遍历) 1.二叉树线索化    二叉树的遍历是按照一定的规则把二叉树中的节点按照一定的次序排列成线性序列进行访问的,实质上就是对一个非线性结构进行线索化操作,使得每个节点(除第一个和最后一个外)都有前驱和后继节点,有时为了运算方便需要记录这些前驱和后继节点,称为二叉树线索化,而对于不同的遍历规则,又分为先序线索二叉树,中序线索二叉树,后序线索二叉树。2.线索二叉树的定义    (1)思路:        ... 阅读详情

InThreading()、InOrderThreading()、InOrderTraverse_Thr()等几个函数来自于严蔚敏老师的数据结构教材,本人编写了main()函数,在VC++6.0和DEV-C++下编译通过。

输入:ABC空格空格D空格空格E空格空格

输出:C B D A E

#include "stdio.h"
#include "malloc.h"
typedef struct BiThrNode 
{
	char data;
	struct BiThrNode *lchild, *rchild;  // 左右指针
	int LTag, RTag; //左右标志: 0代表孩子, 1代表线索
}BiThrNode, *BiThrTree;

BiThrTree pre;

void CreateBiTree(BiThrTree &T) 
{
	char ch;
	scanf("%c",&ch);
	if(ch==' ') 
		T=NULL;
	else 
	{
		T = (BiThrNode *)malloc(sizeof(BiThrNode));
		T->data = ch;              // 生成根结点
		T->LTag=0;
		T->RTag=0;
		CreateBiTree(T->lchild);   // 构造左子树
		CreateBiTree(T->rchild);   // 构造右子树
	}
}

void InThreading(BiThrTree p) 
{
	if(p) 
	{    // 对以p为根的非空二叉树进行线索化
		InThreading(p->lchild);      // 左子树线索化
		if(!p->lchild)      // 建前驱线索
		{ 
			p->LTag = 1;    
			p->lchild = pre; 
		}
		if(!pre->rchild)   // 建后继线索
		{ 
			pre->RTag = 1;   
			pre->rchild = p; 
		} 
		pre = p;             // 保持 pre 指向 p 的前驱
		InThreading(p->rchild);      // 右子树线索化
	}   
} 

int InOrderThreading(BiThrTree &Thrt, BiThrTree T) 
{ // 构建中序线索链表
	Thrt = (BiThrTree)malloc(sizeof( BiThrNode));
	Thrt->LTag = 0;  
	Thrt->RTag =1; 
	Thrt->rchild = Thrt;      // 添加头结点
	if(!T)  
		Thrt->lchild = Thrt; 
	else 
	{             
		Thrt->lchild = T;   
		pre = Thrt;
		InThreading(T);                 
		pre->rchild = Thrt;   // 处理最后一个结点
		pre->RTag = 1;    
		Thrt->rchild = pre;    
	}
	return 1;
}                  

void InOrderTraverse_Thr(BiThrTree T) 
{
	BiThrTree p;
	p = T->lchild;       // p指向根结点
	while(p != T) 
	{     // 空树或遍历结束时,p==T
		while(p->LTag==0)  
			p=p->lchild;  // 第一个结点
		printf("%c ",p->data);
		while(p->RTag==1 && p->rchild!=T) 
		{
			p = p->rchild;  
			printf("%c ",p->data);      // 访问后继结点
		}
		p=p->rchild;          // p进至其右子树根
	}
} // InOrderTraverse_Thr

int main()
{
	BiThrTree T,Thrt;
	CreateBiTree(T);
	InOrderThreading(Thrt, T);
	InOrderTraverse_Thr(Thrt);
	printf("\n");
	return 0;
}

 

线索二叉树(线索链表遍历,二叉树线索化) 特别的是,对于D和F,D是中序遍历的开头结点,它没有前驱节点;F是中序遍历的结尾的结点,它没有后继节点,那么这时,寻找的规则是,如果结点的Ltag==1代表可以直接找到前驱节点;由下图可见,有的左右指针是连接的子树,没有链接左右子树的指针现在就通过红色的虚线指向了该结点的前驱或者后继。可以发现,相较于原来的二叉链表,这里在数据结构里添加了两个int类型,来规定左右指针的作用。再通过以下步骤创建一个线索二叉树(下图是中序线索二叉树的结构示意)线索二叉树,即在二叉链表的基础上,将二叉链表的。... 阅读详情

相关推荐

线索二叉树的建立和遍历(附源码)(前/中/后序)「数据结构算法精讲」

前言:二叉树的非递归遍历算法(点此学习算法)避免了系统栈的调用,提高了执行效率。而线索二叉树可以将用户栈也省去,把二叉树的遍历过程线性化,进一步提高效率(但代价就是会使用较多的的存储空间)。 完整代码见文章末尾 普通的二叉链表,n个结点的二叉树会有n+1个空链域,为了把这些空链域有效的利用起来,线索二叉树出现了。 线索二叉树的结点构造如下: lchild ltag data rtag rchild 左孩子 左标识域 数据域 右孩子 右标识域 typedef struct TBTNode

BBBling的博客 5082

二叉树的构建与遍历(先序、中序、后序、层次)

二叉树的构建与遍历

人生处处是围城,一切都是最好的安排! 1万+

线索化二叉树(线索化二叉树遍历方法,倒序线索化二叉树遍历结果)

本篇介绍线索化二叉树、线索化后的中序遍历以及反向输出中序遍历。 注:(不管是前序遍历、中序遍历或者后序遍历,道理都是一样的,只不过顺序不一样,所以本篇的就拿中序遍历作为讲解,方便统一与理解) 文章目录1.线索化二叉树1.1-什么是线索化二叉树1.2-线索化二叉树的意义1.3-线索化二叉树完整代码2.线索化后的中序遍历2.1-思路2.2-完整代码3.(拓展)利用线索化后的二叉树反向输出中序遍历3.1-思路3.2-完整代码 1.线索化二叉树 1.1-什么是线索化二叉树 首先思考一下:我们知道,不管是二叉树的前序

weixin_45642253的博客 1595

【数据结构入门实验】二叉树的建立和遍历完整代码

实验内容: 1.二叉树的建立与遍历(验证性实验) 问题描述 建立一棵二叉树,并对其进行遍历(先序、中序和后序),打印输出遍历结果。 基本要求 从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),并采用递归 算法对其进行遍历(先序、中序和后序),将遍历结果打印输出。 测试数据 ABC□□DE□G□□F□□□(其中□表示空格字符),则输出结果为:先序为ABCDEGF,中序为 CBEGDFA, z 后序为CGBFDBA。 实验分析: 实验要求

亿维数组's博客 4412

【数据结构】C语言实现线索二叉树

【数据结构】第五章——树与二叉树——线索二叉树 详细介绍C语言实现线索二叉树以及线索二叉树的遍历

蒙奇D索大的博客 1126

【数据结构】C语言实现二叉树的线索化——中序线索化、先序线索化、后序线索化

【数据结构】第五章——树与二叉树——二叉树的线索化 详细介绍C语言实现二叉树的三种线索化——中序线索化、先序线索化、后序线索化

蒙奇D索大的博客 1145

二叉树的创建以及遍历

**二叉树的存储方式有两种,一种是以链表的方式进行存储,一种是以数组的方式进行存储*当以数组的方式进行存储的时候,要注意节点之间的关系,假设根节点的位置为POS那么左子树的位置就是*2*POS+1,右子树的位置就是2*POS+2。正是由于这层关系,当二叉树不是满二叉树的时候,使用数组进行存储*是非常的浪费空间的,空间的利用率较低。*当以链表的方式存储二叉树的时候,每一个二叉树节点都含有一个左孩子指针和一个右孩子指针,两个指针分别*指向相应的节点,节省空间,并且更容易使用。*/...

qq_51725723的博客 2709

半导体硅制造工艺

抛光液和硅片的反应速度很快,只要稍一停留,立刻便会腐蚀,因此取片时,不能在表面上留下抛光液,必须紧接着水抛,直至抛光液被全部冲去,再将片子取下。由于晶圆制造过程有各种各样的晶圆固定器和自动设备,需要严格的直径控制以减少晶圆翘曲和破碎,而单晶硅棒的外径表面并不平整且直径也比最终抛光晶片所规定的直径规格大,因此需要通过外径滚磨获得较为精确的直径。胶体的颗粒直径比磨料的颗粒直径小一个数量级,且硬度与硅相当,因此它比用磨料的机械抛光表面损伤更小,抛光出的硅片表面具有高度的镜面光洁。不受材料导电类型和电阻率的影响。

pgpaojiao的博客 2240

二叉树的构建与遍历(C语言)

目录 一、二叉树的存储结构 二、二叉树的遍历 一、二叉树的存储结构 1.顺序存储: 顺序结构存储就是使用数组来存储,一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空 间的浪费。而现实中使用中只有堆才会使用数组来存储。二叉树顺 序存储在物理上是一个数组,在逻辑上是一颗二叉树。 2.链式存储 二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。 通常的方法是 链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存

Enthusiastic_boy的博客 4993

power bi 演唱会-佐罗

我是业务分析人员,注重使用性,因此,课程不到 30% 的内容就可以解决目前为止我碰到的所有业务问题,剩下的 70% 内容是帮助我提升,优化,升华,精益求精用的,比如第三方工具,比如代码运行速度优化,比如查询逻辑优化等等。系统性上来说,结构明晰,安排上非常有条理,层层递进;《BI 真经》,中有真经二字,略显夸大,而当我第一次证明了这点的时候,我也非常惊讶,这就是我做以下所有事情的一切动力。《BI 真经》综合考量思想性,系统性,本质性,创新性,通用性,技巧性,启发性,对比其他课程有压倒性的显著优势。

v_1090213742的博客 911

VSCode玩转Arduino:手把手解决‘未定义Serial’和头文件找不到的坑

本文详细介绍了在VSCode中配置Arduino开发环境时遇到的‘未定义Serial’和头文件找不到问题的解决方案。通过修改c_cpp_properties.json文件、调整IntelliSense引擎设置以及添加正确的库路径,开发者可以高效解决这些常见错误,提升开发体验。文章还提供了针对不同开发板和平台的高级配置技巧,确保配置的长期有效性。

weixin_42620202的博客 356

二叉树的创建与遍历

二叉树有多种不同的遍历方法,比如先序遍历(preorder traversal)、中序遍历(inorder traversal)和后序遍历(postorder traversal)。例如,先序遍历通常用于复制一棵二叉树,中序遍历通常用于排序,后序遍历通常用于计算一棵二叉树的高度。

kashine的博客 6553

深度解析电力负荷预测:基于深度学习的完整实战指南

电力负荷预测是智能电网运行中的核心技术之一,准确的负荷预测对于电网的稳定运行、电力市场交易以及能源调度具有重要意义。本文将详细介绍电力负荷预测的完整解决方案,从数据预处理、特征工程到模型构建与评估,提供完整的可执行代码。我们将使用LSTM(长短期记忆网络)和Transformer两种主流深度学习模型进行实现,并通过实际数据集验证模型效果。电力负荷预测是指根据历史负荷数据、气象因素、时间特征等多维信息,预测未来某一时段的电力需求。超短期负荷预测:未来几分钟到几小时短期负荷预测:未来1天到1周中期负荷预测。

YOLO 111

数据结构-线索二叉树(后序线索二叉树及遍历)

后序线索二叉树 线索化的概念及相关图解 在上一篇中详细介绍了中序线索二叉树,线索化图解及相关概念都放在那篇博客啦,放个传送门 线索二叉树详细解析(含图解):传送门 包括还有先序线索二叉树:传送门   后序线索二叉树 (1)后序线索二叉树的构造              ①思路:在这里说下构造的原因,与先序中序线索二叉树不同,在遍历时后序时先把孩子全部遍历了再回到父...

[SZU_Crayon] 4万+

ESP8266-Arduino编程实例-TEA5767收音机模块驱动

TEA5767HN 是一款用于低压应用的单芯片电子调谐 FM 立体声收音机,具有完全集成的中频 (IF) 选择性和解调功能,频率范围从76—108MHZ自动数字调谐。 该收音机完全无需调整,高灵敏度,高稳定性,低噪音,收音模块。只需要最少的小型低成本外部组件。 收音机可以调到欧洲、美国和日本的 FM 波段。...

视觉与物联智能 1980

【24E】SWT6652 wifi驱动加载失败问题分析及解决方案

修改驱动配置Kconfig。是由于内存分配失败导致。

wgl307293845的博客 219

线索二叉树(中序、先序和后序及遍历)

线索二叉树是二叉树的一种。介绍了线索二叉树的三种遍历以及实现。

达的程序员日记 1万+

[密码学实战]密评考试训练系统v1.0程序及密评参考题库(获取路径在文末)(二十四)

本系统将密码学理论与软件工程实践相结合,为密评备考提供了高效解决方案。随着《密码法》的深入实施,掌握密评知识将成为信息安全从业者的核心竞争力。立即开始您的密码安全专家之旅!(注:实际应用请以最新发布版本为准)

曼岛_的博客 797

【高阶数据结构】线索二叉树的构建和相关操作(精美图解+完整代码)

构建线索二叉树,对二叉树进行线索化,线索二叉树的一系列相关操作。

更新C/C++,数据结构与算法,计算机视觉,深度学习,目标检测 1587

深度学习实战103-基于KDD Cup 99数据集的搭建神经网络的检测系统(NIDS),通过对网络流量数据进行分析,提供完整代码

接下来,我们定义一个全连接神经网络模型。return x# 创建数据集和数据加载器# 初始化模型通过以上步骤,我们实现了一个基于PyTorch的简单网络入侵检测系统。这个系统使用KDD Cup 99数据集进行训练和评估。实际应用中,您可以根据需求调整模型结构、超参数以及数据预处理方法。希望对大家有所帮助!如果有任何问题或需要进一步的解释,请随时咨询。

微学AI的博客 1582

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

中序线索化二叉树及遍历

中序线索化二叉树及遍历。 函数接口定义: void InThreading(BiThrTree p);// 以结点P为根的子树中序线索化 void InOrderTraverse_Thr(BiThrTree T);// 中序遍历二叉线索树T的非递归算法,对每个数据元素直接输出 裁判测试程序样例: #include<iostream> using namespace std; type...

zaiyang遇见 9088

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

线索二叉树的中序遍历线索化实现

先码着,明天添加文字说明 #include <iostream> #include <cstdio> #include <cstdlib> using namespace std; typedef enum Tag{ Ptr,Thread }PointerTag; //Ptr=0:指针,Thread=1:线索 //二叉链表的结点结构 typede...

qq_42932834的博客 4819

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【数据结构】第5章 树和二叉树 实验6:中序线索二叉树的创建与遍历

【线索二叉树的中序创建、先序中序后序遍历】实验报告+完整代码

wwr's study notes 1481

数据结构——二叉树线索化遍历(前中后序遍历)

二叉树线索化是一种将普通二叉树转换为具有特殊线索(指向前驱和后继节点)的二叉树的过程。这种线索化的目的是为了提高对二叉树的遍历效率,特别是在不使用递归或栈的情况下进行遍历。将二叉树线索化的主要目的是为了提高对二叉树的遍历效率以及节省存储空间。线索化使得在不使用递归或栈的情况下可以更快速地进行遍历,特别是在特定顺序的遍历时,如前序、中序或后序遍历。:线索化后,可以在常量时间内找到节点的前驱和后继节点,从而实现更高效的遍历。这对于需要频繁遍历大型二叉树或需要在树的中间部分执行插入和删除操作时特别有用。

qq_58240849的博客 3099

线索二叉树实现中序遍历

文章目录前言一、方法可行性二、主要代码实现1.新的树节点定义2.为中序遍历增加线索3.中序遍历输出三、所有代码 前言 如需多次按前中后序遍历二叉树,使用线索二叉树可以加速二叉树的遍历。 一、方法可行性 二叉树的叶子节点存在一个或两个空指针,重复利用空指针可以帮助遍历二叉树。 由节点总数: n2 + n0 + n1, 边总数: 2 * n2 + n1 满足等式 2 *n2 + n1 + 1 (边数) = n2 + n1 + n0(节点总数),也就是n2 = n0 - 1 二叉树中的空指针数量.

weixin_39234139的博客 5280

Python实现线索化二叉树 Python实现线索化存储二叉树 Python线索化二叉树的遍历

Python实现线索化二叉树 Python实现线索化存储二叉树 Python线索化二叉树的遍历

storyfull 3287
上一篇: 数据结构:多维数组的编程实现
下一篇: 数据结构:图的邻接表存储与深度优先搜索 完整代码
xifengcode
博客等级 码龄9年 529粉丝 30原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值