线索二叉树

线索二叉树详细解释 全知识整理目录 数据结构整理的目录包括了许多的数据结构相关知识。 概述 什么是线索二叉树? 为了区分二叉树的左孩子指针,和右孩子指针是否为空,为结点增加了2个域,这两个域分别是Ltag和Rtag。这样的二叉树,就是线索二叉树。 需要了解的概念 如果结点有左孩子:那么Lchild指向他的左孩子,否则指向遍历序列中他的前驱结点。 如果结点有右孩子:那么Rchild依然指向他的左孩子,否则指向遍历序列的后继节点。 Ltag=0:表示Lchild指向结点的左孩子。 Ltag=1:表示Lc. 阅读详情

一.原理
利用原来的空链域存放指针,指向树中其他结点,这种指针称为线索
决定lchild是指向左孩子还是前驱,rchild是指向右孩子还是后继,需要一个区分标志的。因此,我们在每个结点再增设两个标志域ltag和rtag
在这里插入图片描述
线索化的实质就是将二叉链表中的空指针改为指向前驱或后继的线索。由于前驱和后继信息只有在遍历该二叉树时才能得到,所以线索化的过程就是在遍历的过程中修改空指针的过程

二.代码实现

1.创建二叉树
ubmV0L3RyaWdnZXJW,size_16,color_FFFFFF,t_70)
2.中序遍历线索化
处理前驱:针对当前节点,什么时候能得到前驱,访问当前节点的时候就可以,因此要记录上一个节点pre,不过前提是T的左子树为空
处理后继:针对pre节点,什么时候处理后继,访问下一个节点的时候,才能知道当前节点的后继是什么,因此对于下一个节点T来说,pre的后继就是T,因此要对pre进行操作,前提是pre!=NULL且pre的右子树为空
在这里插入图片描述

  1. 遍历线索二叉树
    有了线索二叉树后,对它进行遍历时,其实就等于操作一个双向链表结构
    在这里插入图片描述
    和双向链表结点一样,在二叉树链表上添加一个头结点,令其lchild域的指针指向二叉树的根结点,其rchild域的指针指向中序遍历访问时的最后一个结点。反之,令二叉树的中序序列中第一个结点中,lchild域指针和最后一个结点的rchild域指针均指向头结点 这样的好处是:我们既可以从第一个结点起顺后继进行遍历,也可以从最后一个结点起顺前驱进行遍历。
void InOrderThreading(BiThrTree *p, BiThrTree T)
{
	*p = (BiThrTree)malloc(sizeof(BiThrNode));
	(*p) -> ltag = Link;
	(*p) -> rtag = Thread;
	(*p) -> rchild = *p;
	if(!T)
	{
		(*p) -> lchild = *p;
	}
	else
	{
		(*p) -> lchild = T;
		pre = *p;
		InThreading(T);
		pre -> rchild = *p;
		pre -> rtag = Thread;
		(*p) -> rchild = pre;
	}
}

void visit(char c)
{
	printf("%c", c);
}

//中序遍历二叉树 非递归
void InOrderTraverse(BiThrTree T)
{
	BiThrTree p;
	p = T -> lchild;
	while(p != T)
	{
		while(p -> ltag == Link)
		{
			p = p -> lchild;
		} 
		visit(p -> data);
		
		while(p -> rtag == Thread && p -> rchild != T)
		{
			p = p -> rchild;
			visit(p -> data);
		}
		p = p -> rchild;
	}
}

4.在这里插入图片描述
5.输出结果
在这里插入图片描述

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

相关推荐

线索二叉树 C语言 数据结构 先序线索二叉树 中序线索二叉树 后序线索二叉树

在二叉树的结点上加上线索的二叉树称为线索二叉树,对二叉树以某种遍历方式(如先序、中序、后序或层次等)进行遍历,使其变为线索二叉树的过程称为对二叉树进行线索化。 文章目录一、c语言实现先序线索、中序线索、后续线索二叉树总结 一、c语言实现先序线索、中序线索、后续线索二叉树 代码如下(示例): #include <stdio.h> #include <stdlib.h> typedef struct BiTNode { int data; BiTNode* lchild, * r.

m0_50614600的博客 3086

数据结构之线索二叉树的基本知识

前面说完了二叉树的基本知识后,我们紧追其后来分享几种特殊又很重要的二叉树,这几种特殊的二叉树在平时的刷题中也是重点和难点,是树这一数据结构的最高层次。今天我们开始来看一看第一种吧——线索二叉树。 1.概念:为了区分二叉树的左孩子指针和右孩子指针是否为空,或者是否指向前驱节点或后继节点,我们将节点的结构改成5个域,在原二叉树的基础上添加左标志域Ltag和右标志域Rtag,他们是两个int型的数据域。 如果节点有左孩子,那么Lchild依然指向他的左孩子,否则指向遍历序列中他的前驱节点。 如果节点有右

m0_63932570的博客 2296

【数据结构】-树-先序线索二叉树,中序线索二叉树,后序线索二叉树

先序线索二叉树,中序线索二叉树,后序线索二叉树之间的对比 结论: 1.先序线索二叉树找前驱节点困难,找后继节点简单 后序线索二叉树找后继节点困难,找前驱节点简单 中序线索二叉树找前驱节点,后继节点都很简单 2.遍历中序和先序线索二叉树,不需要栈,直接通过线索就可以实现 遍历后序线索二叉树,要用栈 注: 1.三种线索二叉树的叶子节点数都能通过线索直接找到前驱和后继,因此分析能否直接遍历,只需要看前非叶子节点是否能找到自己的前驱和后继就好了。 2.三种遍历前驱和后继的位置 ...

vector的博客 6136

大话数据结构---(五)二叉树

1.二叉树的基本概念 二叉树是n个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。 二叉树特点 (1)每个结点最多有两棵子树。 (2)左子树和右子树是有顺序的,次序不能任意颠倒。 (3)即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。 特殊二叉树 满二叉树:如果所有分支结点都存在左子树和右子树,并且所有叶子都...

松落 1361

别再纠结高侧低侧了!用INA199/INA219这类集成电流检测芯片,5分钟搞定精准电流测量

本文详细解析了使用INA199/INA219等集成电流检测芯片实现精准电流测量的高效方案。通过对比传统分立元件方案,突出集成芯片在精度、温度稳定性和设计简化方面的优势,并提供硬件设计避坑指南和软件实现最佳实践,帮助开发者快速掌握电流检测技术。

weixin_42685438的博客 471

华为2022硬件逻辑笔试题

单选题(每题两分) 1.以下关于过程赋值的描述,不正确的是() A在非阻塞性过程赋值中,使用赋值符号“< =” B赋值操作符是“=”的过程赋值是阻塞性过程赋值 C在非阻塞性过程赋值中,对目标的赋值是非阻塞的(因为时延),但可预定在将来某个时间步发生(根据时延:如果是0时延,那么在当前时间步结束) D非阻塞性过程赋值在其后所有语句执行前执行 解:D 2.芯片的功耗和下列哪种不强相关_____________。 A资源利用率 B核电压 C组合逻辑级数 D翻转率 解:A 3.下列说

weixin_44072819的博客 1万+

【数据结构】线索二叉树(适用场景+图文推导过程+C语言代码实现)

在实际问题中,如果所用的二叉树需经常遍历或查找结点时需要某种遍历序列中的前驱和后继,那么采用线索二叉链表的存储结构就是非常不错的选择。我们对二叉树以某种次序遍历使其变为线索二叉树的过程称做是线索化。

crr411422的博客 5996

手把手教你用89C52单片机驱动0.96寸OLED(IIC接口,附完整代码)

本文详细介绍了如何使用89C52单片机通过I2C接口驱动0.96寸OLED显示屏,包括硬件连接、I2C通信原理、SSD1306驱动芯片的初始化及显存管理技巧,并提供了完整的代码示例和常见问题排查方法,帮助电子爱好者快速掌握OLED显示技术。

weixin_30781433的博客 370

详解线索二叉树

对线索二叉树的概念进行说明,并分别介绍了中序线索二叉树、先序线索二叉树和后序线索二叉树找其前驱和后继的方法。

kusunoki的博客 9932

【魔兽世界插件】魔兽世界插件实战笔记从入门到放弃的心理历程 第一节 lua框架的建立

魔兽世界插件实战笔记从入门到放弃的心理历程 第二节 lua框架的建立 找到魔兽世界的安装目录,找到插件的默认位置:\World of Warcraft\_retail_\Interface\AddOns,在这里建立一个文件夹,魔兽的插件都是用一个文件夹来区分的,第一课吗,就用Lesson_one吧。 下面建立的三个文件,第一个点toc文件是最重要的一个,它是魔兽客户端识别插件的一个标识符。 魔兽版本号有一个函数可以查询在WoWLua下面运行:print("当前游戏版本号:",(select(4,GetBui

qq_33075391的博客 6450

抖音短视频数据抓取实战系列(一)——模拟器性能对比与优化配置

本文是抖音短视频数据抓取实战系列的开篇,重点探讨了模拟器选型与优化配置。通过对比雷电、夜神、逍遥三大主流模拟器在性能、抖音兼容性及抓包友好度上的表现,文章指出雷电模拟器因其稳定的桥接网络模式和良好的兼容性,是数据抓取的优选。并提供了雷电模拟器从安装、网络桥接到系统优化的详细配置指南,旨在帮助读者构建稳定高效的抓取环境。

weixin_29230901的博客 248

关于线索二叉树的详解

线索二叉树的详解 目录线索二叉树的详解前言一、线索二叉树是什么?三种二叉树线索化实例图二、实现线索二叉树1.二叉树的线索化2.线索二叉树的遍历中序线索二叉树寻找遍历的首节点中序线索二叉树寻找节点的直接后继遍历中序线索二叉树总结 前言 学了二叉树,我们发现,对二叉树的遍历是一个比较复杂的问题,需要用到递归或者栈才可以进行遍历,这样子的遍历实质上就是将二叉树化为一个有序的线性序列,在这个序列中,每一个节点有且只有一个前继节点(第一个节点除外),和一个后继节点(最后一个节点除外),但是这些节点不能直接的找到当

kcy的博客 1万+

SAP STO流程实战:如何配置外向交货单PGI后自动生成内向交货单(附避坑指南)

本文详细解析了SAP STO流程中,如何配置实现外向交货单发货过账(PGI)后自动生成内向交货单。通过分步指南,重点阐述了SPED输出类型、输出条件记录、收货点及确认控制码等关键配置,并提供了针对“No goods receipt possible”等常见错误的避坑指南,助力实现跨公司物料转移流程的自动化与高效衔接。

weixin_28327051的博客 395

线索二叉树、中序线索二叉树的创建和遍历

线索二叉树 按照某种遍历次序对二叉树进行遍历,可以把二叉树中的所有结点排成一个线性序列。在具体应用中,有时需要访问二叉树中的结点在某种遍历序列中的前驱和后继,此时,在存储结构中应保存结点在某种遍历序列中的前驱和后继。这些指向前驱和后继结点的指针称为线索,加上线索的二叉树称为线索二叉树,相应地,加上线索的二叉链表叫做线索链表。线索链表结构如下: 字段:ltag, lchild, value, rchild, rtag ltag={0,lchild指向该结点的左孩子1,lchild指向该节点的前驱rtag={0

HMT的博客 6328

数通基础(基本网络通信原理、IP地址如何配置、DHCP、DNS域名系统、路由技术基础、静态路由 、TCP和UDP、vlan虚拟局域网、trunk、三层交换)

我们知道了1、电脑开机,通过dhcp获取ip地址2、电脑输入域名,www.baidu.com电脑把www.baidu.com发到自己的dns服务器3、dns服务器把域名解析成对应的ip地址4、电脑向百度服务器发送一个请求。

qq_53235556的博客 6482

从SRIOV到SIOV:PCIe虚拟化技术下一代革命

如果说SR-IOV是过去十年PCIe虚拟化的“标杆方案”,那SIOV就是为超大规模云数据中心、AI集群量身打造的“破局者”——它解决了SR-IOV难以逾越的扩展性瓶颈,同时平衡了性能、成本与生态兼容性。今天就从“为什么需要SIOV”到“SIOV到底强在哪”,再到“未来要解决什么问题”,做一次全方位深度拆解。

存储随笔 2565

树 —— 线索二叉树

线索二叉树的定义 充分利用二叉链表中的空链域,将遍历过程中结点的前驱、后继信息保存下来。 若结点有左子树,则其 LChild 域指向其 左孩子,否则 LChild 域指向其 前驱结点。 若结点有右子树,则其 RChild 域指向其 右孩子,否则 RChild 域指向其 后继结点。 线索:在这种存储结构中,指向前驱和后继结点的指针叫做线索。 线索链表:以这种结构组成的二叉链表作为二...

starter_____的博客 2425

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

线索二叉树的理解

为什么要有线索二叉树? 为了解决无法直接找到该结点在某种遍历序列中的前驱和后继结点的问题 但是同时出现了二叉链表找左、右孩子困难的问题,即在构建线索二叉树之后,链表的原来遍历方式会出问题。 --ltag为0表示lchild指向该节点的左孩子,为1表示lchild指向该节点的前驱 --rtag为0,表示rchild指向该节点的右孩子,为1时,rchild指向该节点的后继 #inc...

huangwei18351的博客 2万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

二叉树的线索化

线索二叉树(Threaded BinaryTree) 1.线索二叉树的基本概念       遍历二叉树是以一定规则将二叉树中的结点排列成一个线性序列,得到二叉树中结点的先序序列、中序序列或后序序列。 这实质上是对一个非线性结构进行线性化操作。使每个结点(除第一个和最后一个外)在这些线性序列中有且仅有一个直接前驱和直接后继。      例如二叉树结点的中序序列a+b*c-d-e/f中,“c”

编程小霸王的Blog 3万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

后序线索二叉树画法_线索二叉树

产生的背景:存在空间浪费的二叉树如上图的二叉树中,如果没有左孩子或者没有右孩子时,就存在空间浪费,如果二叉树很大时,空间浪费就会非常严重。如果想知道某个结点的前驱和后继时,就要通过遍历一次来确定。所以为了解决这个问题,现在可以利用这些浪费的空间来存储结点的前驱和后继。按照一种的顺序来存储前驱和后继。(例如中序遍历的方式)利用浪费的空间来做有限的线索化目的: 解决空间浪费问题;寻找某个结点的前驱和后...

weixin_39789690的博客 1万+

C语言-线索二叉树

应当指出,这种利用二叉链表中的空指针实现的线索二叉树,仅中序线索二叉树最实用,因为在中序线索的指引下,找每个结点的中序前驱和中序后继都比较方便。所以,若要建立先序线索二叉树和后序线索二叉树,建议对于每个节点T,多使用两个指针prior和next,其中prior指向T的某序前驱,next指向T的某序后驱。设指针T指向当前访问的结点,为了记下结点的前驱、后继关系,设置一个初值为NULL 的全局指针变量 pre,令 pre始终指向当前访问结点T的直接前驱,即pre是T的中序前驱,T是pre的中序后继。

2301_79349959的博客 1767
上一篇: 树 二叉树 森林 相互转换
下一篇: 哈夫曼编码
ZoeLandia
博客等级 码龄6年 734粉丝 183原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值