(C++)二叉树的线索化 / 线索二叉树

二叉树的中序遍历线索化 二叉树的线索化@(Linux C/C++)[线索二叉树,中序遍历,]理论基础在二叉树的二叉链表表示实现的时候,当以二叉树作为存储结构时,只能找到节点的左右孩子信息,不能直接得到结点在任一序列中的前驱和后继信息,只有在遍历过程中才能得到这种信息。我们知道,在n个结点的二叉链表栈必定存在n+1个空链域,因此,可以利用这些空链域来存放这些结点信息。所以作如下规定:若结点右左子树,则其lchild域指向其左 阅读详情
  • 好久不见,朋友们!虽然我知道没人看我的博客,但我还是想叨逼叨一下。啊,好久没编程了(其实也就一周没编),但你们知道,程序员一天不编程那能叫程序员么???虽然我不是程序员哈哈哈哈哈,但还是要有基本素养嘛。

  • 继续写二叉树,给自己立一个flag,就是这几天要写完之前没做完的几道题,和二叉树红黑树各种树之类的~~虽然有这个flag,但我还是很实诚地遵从自己的内心,买了一张明天的电影票,等我回来告诉你们好不好看!好看的话,我就!!写影评!!但!!不给看!!

  • 好的,我是屯了很多电影和书没看啦,但我屯的代码好像更多。之前又比较犯懒,就只码代码,没写博客,但我发现哦,写博客真的很有助于增进对代码的分析能力,所以我又开始以我神经兮兮的风格开始写博客啦!

  • 今天我要写的博客是关于二叉树的线索化,当然,也可以理解为是线索二叉树。

线索二叉树

什么是线索二叉树

  • 对于n个结点的二叉树,在二叉链表的数据存储结构中,总是有(2n - (n-1) = n+1)个空链域。
  • 我们利用这些空链域存放某种遍历次序下该结点前驱结点和后续结点的指针,并将这些指针称为线索,称该二叉树为线索二叉树,称给二叉树加上线索的过程为二叉树的线索化。

为什么要进行二叉树的线索化

  • 我们都知道,二叉树是一种非线性的数据结构,遍历二叉树时,我们常使用递归或者用栈辅助从而实现非递归的遍历。
  • 显然,当我们使用二叉树作为存储结构时, 取到一个结点,我们只能获取到结点的左右孩子,而无法获取到结点的前驱和后继。
  • 那么,为了进一步增强遍历的实用性,我们利用二叉树结构中的空指针来存放各结点的前驱和后继信息。

线索二叉树的基本设计

这里写图片描述

  • 如果_left为空,则存放指向中序遍历序列中该结点的前驱结点。
  • 如果_right为空,则存放指向中序遍历序列中该结点的后继结点。
  • 如果_leftTag为Link,则代表着结点存放的是其左孩子;存放的是Thread则代表着其存放的是其前驱结点。
  • 如果_rightTag为Link,则代表着结点存放的是其右孩子;存放的是Thread则代表着其存放的是其后继结点。

线索二叉树的实现

中序遍历模型

这里写图片描述

代码实现

#include<iostream>

using namespace std;

//线索化标志Tag
enum PointerTag {THREAD, LINK};

//结点结构
数据结构之中序线索二叉树(C++) 中序线索二叉树 一、 目的: 理解线索的含义,掌握线索二叉树的算法。 了解中序线索及其遍历的实现过程。 二、内容: 通过学习同学知道,遍历二叉树是以一定的规则,将二叉树中的结点排列成一个线性序列,得到二叉树的先序序列、中序序列、或者后序序列。这实质是将一个非线性结构进行线性化操作。但是,当以二叉链表作为存储结构时,只能找到左右孩子的信息,而不能找到任意的结点的前驱信息和后继信息。这种信息只能在... 阅读详情

相关推荐

二叉树、线索二叉树类模版(C++)

二叉树模版:包括先序中序构造,后序中序构造,结点的度,统计度为n的结点个数,高度,宽度,结点的最大值,交换每个结点的左右,删除叶结点,是否完全二叉树,广度优先遍历,先序遍历,中序遍历,后序遍历; 线索二叉树:包括先序中序构造,中序线索化,中序线索化遍历; 包括测试主函数。

别再乱短接了!OEC/OEC-turbo刷机救砖,用RKDevTool避开‘下载boot失败’的保姆级教程

本文提供OEC/OEC-turbo刷机救砖的终极指南,重点介绍使用RKDevTool避开‘下载boot失败’的详细步骤。从Loader模式的优势到硬件准备细节,再到分阶段刷机方案,帮助用户高效完成设备恢复,避免反复短接和常见误区。

weixin_29280657的博客 1100

计算机视觉与深度学习实战:以Python为工具,基于帧间差法进行视频目标检测

计算机视觉是一门研究如何使机器从数字图像或视频中提取、分析和理解有用信息的学科。它涉及图像处理、计算机图形学、人工智能等多个领域的知识。通过计算机视觉技术,我们可以实现图像的识别、分类、目标检测等功能。本文介绍了计算机视觉与深度学习的基本概念和原理,并以Python为工具,基于帧间差分法实现了视频目标检测。帧间差分法具有算法实现简单、程序设计复杂度低、对光线等场景变化不太敏感等优点,因此在实际应用中得到了广泛的应用。然而,帧间差分法也存在一些局限性,如对于缓慢移动或静止的物体检测效果不佳。

一个好知识的传播者 1256

RustDesk网页端远程控制实战:如何用Web Client替代传统客户端(附安全配置建议)

本文详细介绍了RustDesk网页端远程控制的实战应用,包括其核心优势、配置流程及安全加固方案。通过Web Client替代传统客户端,用户可实现跨平台无缝体验和企业级管理效率,特别适合临时协作和移动设备使用。文章还提供了JWT身份验证、LDAP集成等安全配置建议,确保网页端访问的安全性。

weixin_30836759的博客 252

CESM笔记——CESM1.0-CESM1.2.2-CESM2.1.3三个版本模式工作流对比

最近测试了CESM1.0,CESM1.2.2和CESM2.1.3三个版本,不同版本在workflow上有一些区别,来做点笔记。 CESM1.0 测试compset:B_2000,F_2000 workflow: 1. create_newcase -case ~/CESM/cesm1_0/script/B_2000 -compset B_2000 -res f19_g16 -mach tianhe 2. cd B_2000 (optional) env_mach_pes.xml ##修改核数,

砍柴姑娘Jourosy的博客 4944

2023年全国青少年信息素养大赛C++编程初中组决赛真题+答案解析

2023年全国青少年信息素养大赛C++编程初中组决赛真题+答案解析

伶俐角少儿编程 818

语言模型推理能力与计算表达力深度解析

语言模型的推理能力本质上是一种知识迁移与泛化应用的过程,其核心在于Transformer架构中的自注意力机制和前馈网络的协同作用。计算表达力作为衡量模型能力的关键指标,涉及函数逼近、组合泛化和上下文理解等多个维度。随着模型规模的扩大,涌现能力现象揭示了参数规模与推理能力之间的非线性关系。在实际应用中,通过提示工程和微调策略可以有效激活和优化模型的推理表现。当前研究正探索模块化架构和世界模型整合等方向,以突破长程推理和因果关系建模等前沿挑战。本文深入探讨了语言模型推理泛化的技术原理与实践方法,为理解计算表达力

weixin_42521032的博客 341

openclaw : 无法将“openclaw”项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决方案

本文主要介绍了openclaw : 无法将“openclaw”项识别为 cmdlet、函数、脚本文件或可运行程序的名称解决方案,希望能对使用openclaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 12万+

R语言中的summarise函数和mutate函数用于计算分组占比。下面是关于这两个函数的详细介绍以及相应的源代码示例:

R语言中的summarise函数和mutate函数用于计算分组占比。

CodeByte的博客 1183

lwip-2.0.3

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

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

上一篇: (试题)使用两个栈实现一个队列
下一篇: (Linux) Linux中目录中的权限问题
JS-js
博客等级 码龄10年 10粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值