在中序线索树中找到数据域A,并在其左子树中插入数据域为x的结点

news2024/10/4 0:18:50

有中序线索树T,结点形式为:(lchild,ltag,rchild,rtag,data),编写非递归算法找到数据域为A的结点,并在其左子树中插入数据域为x的结点

思想:利用线索二叉树的遍历方法找到数据域为A的结点。

如果A没有左孩子,将新插入的结点作为A的左孩子。将x的前驱为A的前驱,x的后继为A.

如果A有左孩子,设置x的左孩子为A的左孩子,设置x为A的左孩子,设置x的后继为A,设置x左孩子的最右侧结点的后继为x。

代码:

//求中序线索二叉树的中序序列下的第一个结点 
ThreadNode *FirstNode(ThreadNode *p){
	while(p->ltag==0) p=p->lchild;
	return p; 
}

//求中序线索二叉树的结点p的中序序列下的后继
ThreadNode *nextNode(ThreadNode *p){
	if(p->rtag==0) return FirstNode(p->rchild);//右子树的最左下结点
	else return p->rchild;//直接返回后继线索 
}

//找到数据域为A的结点 
ThreadNode *findNode(ThreadNode A,ElemType A){
	ThreadNode *r;//辅助结点
	for(r=FirstNode(T);r->data!=A;r=nextNode(r)) ;//从中序第一个元素开始找元素A 
	return r;
} 

//将x作为数据域为A的结点的左孩子,并保持线索化
void insertx(ThreadNode T,ElemType A,ThreadNode *x){
	ThreadNode *p=findNode(T,A);//找到数据域为A的结点
	if(p->ltag) {//p没有左孩子 
		x->ltag=true;
		x->lchild=p-lchild;
	}else{
		x->ltag=false;//p有左孩子 
		x->lchild=p-lchild;
		ThreadNode *s=x->lchild;//暂存x的左孩子
		while(s->rtag==0){//找到x的左孩子的最右结点 
			s=s->rchild;
		} 
		s->rchild=x;//设置这个最右结点的后继为x 
	} 
	p->lchild=x;//p的左孩子修改为x
	p->ltag=false;
	
	x->rtag=true;//x的后继修改为p 
	x->rchild=p; 
} 

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

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

相关文章

Resdis中关于字符串类型的基础命令

本文主要详解key-value中vaule为字符串类型的情况,value属于其他的数据类型不适应;有几个命令是通用命令 目录 1.set和get 2.keys 3.exists 4.del 5.expire 6.ttl 7.type 8.object encoding key 9.加减操作 10.字符串操作 11.命令小结 1.se…

拿下奇怪的前端报错:SyntaxError: Unexpected token ‘??=‘或‘xxx‘ - 浅谈Nodejs版本过高过低的部分问题

在前端开发时,如果同时维护多个项目,跨越的年度又比较大,难免会使用多个Nodejs版本。有时候版本不对,不仅仅是安装会报错 1 依赖无法安装 一般情况下nodejs又向后兼容较好(除了部分三方包),所…

day03-js 作业

js基础 一.选择 1C 2C 3D 4C 5B 6B 7C 8A 二.编程 2 函数 数组与对象 一.选择 1D 2C 3D 4A 5D 6B 7B 8A 二.编程 1 2 4

Linux驱动开发(速记版)--设备树插件

第六十八章 设备树插件介绍 Linux 4.4之后引入了动态设备树,其中的设备树插件(Device Tree Overlay)是一种扩展机制,允许在运行时动态添加、修改或删除设备节点和属性。 设备树插件机制通过DTS(设备树源文件&#xff0…

50.哀家要长脑子了!

1.1705. 吃苹果的最大数目 - 力扣(LeetCode) 贪心贪在哪里,用一个优先队列(小根堆)存储腐烂日期和该日期苹果腐烂的数量。优先吃掉距离腐烂日期最近的苹果。吃苹果分为两个阶段,第一个是在1-n天内&#xff…

MySQL 中的 LAST_INSERT_ID()函数详解

在 MySQL 数据库中,LAST_INSERT_ID()是一个非常有用的函数。它可以帮助我们获取最近一次插入操作所生成的自增 ID 值。本文将详细解释 MySQL 中的LAST_INSERT_ID()函数及其用途。 一、函数介绍 LAST_INSERT_ID()是 MySQL 中的一个内置函数,它返回最近一…

跨平台音乐播放器Feishin

什么是 Feishin ? Feishin 是一款现代的自托管音乐播放器,支持多种音乐来源和功能。它是由Sonixd 的重构版本发展而来,能够与 Navidrome 或 Jellyfin API 音乐服务器兼容,目前还不支持 Subsonic API 。Feishin 具有现代化的用户界…

【mmsegmentation】Loss模块详解(入门)以调用FocalLoss为例

1、mmdet中损失函数模块简介 1.1. Loss的注册器 先来看段代码:mmseg/models/builder.py # mmseg/registry/registry.py # mangage all kinds of modules inheriting nn.Module # MODELS Registry(model, parentMMENGINE_MODELS, locations[mmseg.models])from mm…

风格迁移项目一:如何使用

前言 由于我不太会pr,所以直接新建的项目, 原项目地址:https://github.com/Optimistism/Style-transfer 原项目代码的讲解地址:https://www.bilibili.com/video/BV1yY4y1c7Cz/ 本项目是对原项目的一点点完善。 项目地址&…

C语言复习概要(一)

本文 C语言入门详解:从基础概念到分支与循环1. C语言常见概念1.1 程序的基本结构1.2 变量作用域和存储类1.3 输入输出1.4 编译与运行 2. C语言中的数据类型和变量2.1 基本数据类型2.2 变量的声明与初始化2.3 常量与枚举 3. C语言的分支结构3.1 if语句3.2 if-else语句…

Python笔记 - 函数、方法和类装饰器

前言 装饰器最早出现是Python2.4版本,为什么这个版本开始存在?这是因为最早标记类方法的做法是: def foo(self):perform method operation foo classmethod(foo)当方法体过长的时候很容易让人忽略掉最后的语句classmethod(foo)&#xff0c…

Win10之解决:设置静态IP后,为什么自动获取动态IP问题(七十八)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…

域内密码喷洒 Password Spray 实验

password spray 1. 实验网络拓扑 kali: 192.168.72.128win2008: 192.168.135.129 192.168.72.139win7: 192.168.72.149win2012:(DC) 192.168.72.131 2. 简单原理 Kerberos针对同一个用户,多次的密码尝试请求有锁定保护策略。 但是我们可以切换用户,…

【Streamlit案例】制作销售数据可视化看板

目录 一、案例效果 二、数据分析 三、加载数据 四、网站前端 (一)网页标题和图标 (二)侧边栏和多选框 (三)主页面信息 ​(四)主页面图表 (五)隐藏部…

基于四种网络结构的WISDM数据集仿真及对比:Resnet、LSTM、Shufflenet及CNN

在上节中,我们已经详细介绍了WISDM数据集及如何使用CNN网络训练,得到了六个维度的模型仿真指标及五个维度的可视化分析,那么现在我们将训练模型推广到其他网路结构中去,通过仿真实验来对比一下不同网络之间对于WISDM数据集的训练效…

【docker笔记8-镜像推送】

docker笔记8-镜像推送 一、基本命令二、案例1.Java demo2.打包镜像 一、基本命令 (1)推送镜像到远程仓库 docker tag local-image:tagname new-repo:tagname docker push new-repo:tagname这里首先要登录到docker,然后需要输入登录用户名和…

构建electron项目

1. 使用electron-vite构建工具 官网链接 安装构建工具 pnpm i electron-vite -g创建electron-vite项目 pnpm create quick-start/electron安装所有依赖 pnpm i其他 pnpm -D add sass scss1. 启动项目 2. 配置 package.json "dev": "electron-vite dev --…

【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错

1. 运行项目 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Appl…

Chromium 修改UA的几种办法方法c++

第一种方式 启动浏览器添加命令行 格式 --user-agent"自定义的UA" 1、C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe --user-agent"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome…

vgg19提取特征

一般来说,大家使用VGG16,用的是第四列的网络架构,而使用VGG19,使用的就是第六列的网络架构。 使用vgg进行提取特征,在这个项目中,使用的就是每一块卷积层的第一层。 import torch.nn as nn from torchvis…