当前位置: 首页 > news >正文

线索二叉树:C++实现

引言:

        线索二叉树是一种特殊的二叉树,它可以通过线索(线索是指在二叉树中将空指针改为指向前驱或后继的指针)的方式将二叉树转化为一个线性结构,从而方便对二叉树进行遍历。本文将介绍如何使用C++实现线索二叉树。

技术实现:

        首先,我们需要定义一个结构体来表示线索二叉树的节点。结构体中包含了节点的数据、左右子节点以及左右线索标记。

template<typename Element>
struct ThrNode
{Element data;ThrNode* lchild;ThrNode* rchild;int lTag;int rTag;
};

        其中,lTag和rTag分别表示左右线索标记。如果lTag为0,则表示该节点的左子节点为普通子节点;如果lTag为1,则表示该节点的左子节点为前驱节点。rTag同理。

接下来,我们使用一个类来表示线索二叉树。该类中包含了根节点以及一些方法。

template<typename Element>
class InThrBiTree
{
public:InThrBiTree();~InThrBiTree();void inOrder();
private:ThrNode<Element>* root;void createTree(ThrNode<Element>*& node);void destroyTree(ThrNode<Element>* node);ThrNode<Element>* first(ThrNode<Element>*node);ThrNode<Element>* next(ThrNode<Element>* node);void createInThread(ThrNode<Element>*& node, ThrNode<Element>*& pre);
};

        其中,createTree方法用于创建线索二叉树,destroyTree方法用于销毁线索二叉树,inOrder方法用于中序遍历线索二叉树。first方法用于找到中序遍历的第一个节点,next方法用于找到中序遍历中的下一个节点。createInThread方法用于创建中序遍历的线索。

接下来看怎么实现:

template<typename Element>
InThrBiTree<Element>::InThrBiTree()
{createTree(root);ThrNode<Element>* pre = nullptr;if (root != nullptr){createInThread(root, pre);pre->rTag = 1;}
}template<typename Element>
InThrBiTree<Element>::~InThrBiTree()
{destroyTree(node);
}template<typename Element>
void InThrBiTree<Element>::inOrder()
{ThrNode<Element>* p = first(p);while (p != nullptr) {cout << p->data << " ";p = next(p);}cout << endl;
}template<typename Element>
void InThrBiTree<Element>::createTree(ThrNode<Element>*& node)
{char item;cin >> item;if (item == '#')node = nullptr;else {node = new BiNode<Element>;node->data = item;createTree(node->lchild);createTree(node->rchild);}
}template<typename Element>
void InThrBiTree<Element>::destroyTree(ThrNode<Element>* node)
{if(node!=nullptr){destroyTree(node->lchild);destroyTree(node->rchild);delete node;}
}template<typename Element>
ThrNode<Element>* InThrBiTree<Element>::first(ThrNode<Element>* node)
{ThrNode<Element>* p = node;while (p->lTag == 0)p = p->lchild;return p;
}template<typename Element>
ThrNode<Element>* InThrBiTree<Element>::next(ThrNode<Element>* node)
{ThrNode<Element>* p = node->rchild;if (node->rTag == 1) {return p;}else {return first(p);}
}template<typename Element>
inline void InThrBiTree<Element>::createInThread(ThrNode<Element>*& node, ThrNode<Element>*& pre)
{if (node == nullptr) return;createInThread(node->lchild, pre);if (node->lchild == nullptr){node->lchild = pre;node->lTag = 1;}if (pre != nullptr && pre->rchild == nullptr){pre->rchild = node;pre->rTag = 1;}pre = node;createInThread(node->rchild, pre);
}

最后,我们来看一下如何使用该类来创建和遍历线索二叉树。

int main()
{InThrBiTree<int> tree;tree.createTree(tree.root);tree.createInThread(tree.root, nullptr);tree.inOrder();tree.destroyTree(tree.root);return 0;
}

        首先创建一个InThrBiTree对象,然后调用createTree方法创建线索二叉树,接着调用createInThread方法创建中序遍历的线索,最后调用inOrder方法中序遍历线索二叉树。最后,调用destroyTree方法销毁线索二叉树。 

结尾:

        以上就是使用C++实现线索二叉树的方法。线索二叉树是一种非常实用的数据结构,它可以方便地对二叉树进行遍历。通过本文的介绍,相信读者已经掌握了如何使用C++实现线索二叉树的方法。

相关文章:

线索二叉树:C++实现

引言&#xff1a; 线索二叉树是一种特殊的二叉树&#xff0c;它可以通过线索&#xff08;线索是指在二叉树中将空指针改为指向前驱或后继的指针&#xff09;的方式将二叉树转化为一个线性结构&#xff0c;从而方便对二叉树进行遍历。本文将介绍如何使用C实现线索二叉树。 技术…...

C++——vector互换容器与预留空间

一.vector互换容器 功能描述:实现两个容器内元进行互换 函数原型: swap(vec); //将vec与本身的元素互换 实例: //1.基本使用 void test01() {vector<int>v1;for (int i 0; i < 10; i){v1.push_back(i);}cout << "交换前:" << e…...

Unity 自带的一些可以操控时间的属性或方法。

今天来总结下Unity自带的一些可以操控时间的方法。 1、Time.time。比较常用计算运行时间而触发特定事件。 public class Controller : MonoBehaviour {public float eventTime 5f; // 触发事件的时间private float startTime; // 游戏开始的时间private void Start(){startT…...

vue 项目中使用 mqtt

1、在html 中用cdn方式引入 <script src"https://unpkg.com/mqtt/dist/mqtt.min.js"></script> 2、封装代码 mqtt_connect.js // import * as mqtt from mqtt/dist/mqtt.min // 不知道为什么 我用引入的方式不成&#xff0c;就在html 用的cdn方式接入了…...

linux shell操作 - 05 进程 与 IO 模型

文章目录 计算机内存分配进程与子进程流IO模型非阻塞IOIO多路复用网络IO模型简单的socket并发的socket 计算机内存分配 一个32位&#xff0c;4G内存的计算机&#xff0c;内存使用分为两部分&#xff1a; 操作系统内核空间&#xff1b;应用程序的用户空间使用的操作系统不同&a…...

让SOME/IP运转起来——SOME/IP系统设计(下)之数据库开发

上一篇我们介绍了SOME/IP矩阵的设计流程&#xff0c;这一篇重点介绍如何把SOME/IP矩阵顺利的交给下游软件团队进行开发。 车载以太网通信矩阵开发完成后&#xff0c;下一步应该做什么&#xff1f; 当我们完成SOME/IP矩阵开发&#xff0c;下一步需要把开发完成的矩阵换成固定格…...

Mybatis反射工厂类DefaultReflectorFactory

DefaultReflectorFactory是反射工厂接口ReflectorFactory的默认实现&#xff0c;其主要是实现了对反射对象Reflector的创建和缓存。 有三个方法&#xff1a; // 判断是否开启缓存boolean isClassCacheEnabled();// 设置是否缓存void setClassCacheEnabled(boolean classCacheEn…...

antDesignPro a-table样式二次封装

antDesignPro是跟element-ui类似的一个样式框架&#xff0c;其本身就是一个完整的后台系统&#xff0c;风格样式都很统一。我使用的是antd pro vue&#xff0c;版本是1.7.8。公司要求使用这个框架&#xff0c;但是UI又有自己的一套设计。这就导致我需要对部分组件进行一定的个性…...

找免费4K高清图片素材,就上这6个网站

使用图片素材怕侵权&#xff1f;那就上这6个网站&#xff0c;免费下载&#xff0c;4K高清无水印&#xff0c;赶紧收藏起来~ 1、菜鸟图库 https://www.sucai999.com/pic.html?vNTYxMjky 一个很大的素材库&#xff0c;站内主要还是以设计素材为主&#xff0c;像图片素材就有上百…...

代码随想录算法训练营第35天| 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球

JAVA代码编写 860.柠檬水找零 在柠檬水摊上&#xff0c;每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品&#xff0c;&#xff08;按账单 bills 支付的顺序&#xff09;一次购买一杯。 每位顾客只买一杯柠檬水&#xff0c;然后向你付 5 美元、10 美元或 20 美元。你必须…...

成为AI产品经理——TPR、FPR、ROC、AUC

目录 一、PR图、BEP 1.PR图 2.BEP 二、灵敏度、特异度 1.灵敏度 2.特异度 三、真正率、假正率 1.真正率 2.假正率 三、ROC、AUC 1.ROC 2.AUC 四、KS值 一、PR图、BEP 1.PR图 二分类问题模型通常输出的是一个概率值&#xff0c;我们需要设定一个阈值&#xff…...

java: Internal error in the mapping processor: java.lang.NullPointerException

启动java项目出错&#xff0c;其他人工程没有问题&#xff0c;别着急。 java: Internal error in the mapping processor: java.lang.NullPointerException at org.mapstruct.ap.internal.processor.DefaultVersionInformation.createManifestUrl(DefaultVersionInformation.j…...

TCP知识点

TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层协议&#xff0c;广泛应用于互联网。下面是TCP的一些知识点&#xff1a; TCP是一种可靠的协议&#xff0c;采用三次握手建立连接和四次挥手断开…...

大语言模型(LLMs)在 Amazon SageMaker 上的动手实践(一)

本期文章&#xff0c;我们将通过三个动手实验从浅到深地解读和演示大语言模型&#xff08;LLMs&#xff09;&#xff0c;如何结合 Amazon SageMaker 的模型部署、模型编译优化、模型分布式训练等。 实验一&#xff1a;使用 Amazon SageMaker 构建基于开源 GPT-J 模型的对话机器…...

顶级数据恢复工具—— 最全的15个数据恢复软件榜单

在这个信息为王的数字时代&#xff0c;关键数据的丢失对个人和企业来说都可能是灾难性的。无论是由于意外删除、硬件故障还是恶意攻击&#xff0c;拥有强大的数据恢复解决方案都是至关重要的。在本综合指南中&#xff0c;我们将探索市场上最好的数据恢复软件&#xff0c;包括顶…...

【图像分类】【深度学习】【Pytorch版本】Inception-ResNet模型算法详解

【图像分类】【深度学习】【Pytorch版本】Inception-ResNet模型算法详解 文章目录 【图像分类】【深度学习】【Pytorch版本】Inception-ResNet模型算法详解前言Inception-ResNet讲解Inception-ResNet-V1Inception-ResNet-V2残差模块的缩放(Scaling of the Residuals)Inception-…...

Ubuntu 22.03 LTS 安装deepin-terminal 实现 终端 分屏

deepin-terminal 安装 源里面自带了这个软件&#xff0c;可以直接装 sudo apt install deepin-terminal 启动 按下Win键&#xff0c;输入deep即可快速检索出图标&#xff0c;点击启动 效果 分屏 CtrlShiftH 水平分割 CtrlShiftJ 垂直分割 最多分割成四个小窗口&#xff0…...

HTTP协议,Web框架回顾

HTTP 请求协议详情 -请求首行---》请求方式&#xff0c;请求地址&#xff0c;请求协议版本 -请求头---》key:value形式 -referer&#xff1a;上一次访问的地址 -user-agenet&#xff1a;客户端类型 -name&#xff1a;lqz -cookie&…...

el-checkbox 对勾颜色调整

对勾默认是白色 改的时候一直在试着改color人&#xff0c;其实不对。我用的是element ui 的复选框 /* 对勾颜色调整 */ .el-checkbox__inner::after{/* 是改这里的颜色 */border: 2px solid #1F7DFD; border-left: 0;border-top: 0;}...

系统管理精要:深度探索 Linux 监控与管理利器

前言 系统管理在 Linux 运维中扮演着至关重要的角色&#xff0c;涵盖了系统的配置、监控和维护。了解这些方面的工具和技术对于确保系统稳定运行至关重要。本文将着重介绍系统管理的关键部分&#xff0c;包括配置系统、监控系统状态和系统的日常维护&#xff0c;并以 top 和 vm…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...