二叉排序树,结点删除的问题,折腾很久了,求解脱
#include<iostream>
using namespace std;
static int i = 1;
struct Node //结点定义
{
int ch;
Node* lchild;
Node* rchild;
};
void insertBST(Node *&t,int key)
{
if(t == NULL)
{
t = new Node;
t->ch = key;
t->lchild = NULL;
t->rchild = NULL;
}
else
if(key < t->ch)
insertBST(t->lchild,key);
else
insertBST(t->rchild,key);
}
Node* searchBST(Node* tree,int key)
{
if(NULL == tree||key == tree->ch)
return tree;
if(key < tree->ch)
searchBST(tree->lchild,key);
else
searchBST(tree->rchild,key);
}
void deleteNode(Node *&p) //删除结点
{
Node* temp = new Node;
if(NULL == p->rchild) //根据主程序的测试用例,这块好像就有问题,但一直没弄明白
{
temp = p;
p = p->lchild;
delete temp;
cout<<"删除了!\n";
}
else
if(NULL == p->lchild)
{
temp = p;
p = p->rchild;
delete temp;
}
else
{
Node* track = new Node;
track = p;
temp = p->lchild;
while(NULL != temp->rchild)
{
track = temp;
temp = temp->rchild;
}
p->ch = temp->ch;
if(track == p)
track->lchild = temp->lchild;
else
track->rchild = temp->lchild;
delete temp;
}
}
void show(const Node* Tree) //先序遍历
{
if(Tree != NULL)
{
cout<<i++<<'\t'; //作为调试信息
show(Tree->lchild);
cout<<Tree->ch<<'\t';
show(Tree->rchild);
}
}
int main()
{
int buf[7] ={8,4,2,6,7,1,3};
Node *tree = NULL;
for(int i = 0;i < 7;i ++)
insertBST(tree,buf[i]);
//show(tree);
//cout<<endl;
Node *tmp = searchBST(tree,1);
cout<<tmp->ch<<endl;
deleteNode(tmp);
show(tree); //这里报错说,访问冲突,应该是上面结点删除的问题吧
return 0;
}
求大神,求解脱,搞了老久了!
相关推荐
计蒜客数据结构实验通关指南:链表、二叉树与排序算法实战避坑
数据结构是计算机专业的核心基础课程,其学习关键不仅在于理解算法理论和代码思路,更在于通过大量工程实践将算法落地为健壮、高效的代码。在线评测系统(OJ)通过隐藏测试点严格检验代码的边界条件处理和调试能力,这种机制倒逼学习者从“能看懂”逐步走向“能写对”。链表操作中的空指针管理、二叉树递归的出口设计、排序算法在极端输入下的性能退化,都是典型的实践难点。掌握这些技术不仅有助于顺利通过实验课考核,更能为课程设计、考研机试和求职面试打下坚实基础。本文以计蒜客平台的数据结构实验为例,系统梳理从线性表、栈与队列到树与图、
科技成果进场交易前,评估备案环节需要准备哪些材料?.docx
科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。
人工智能基于类型化方法的训练数据获取与处理体系:构建数据中心化AI治理框架
内容概要:本文从类型化视角系统研究了人工智能训练数据的获取与处理体系,提出应构建多元化、高质量、合规有序的数据供给体系。文章首先分析数据获取的三种类型:来源类型(网络公开抓取、开源数据集、多源协同)、合规性类型(合法性困境与制度供给)以及产业组织类型(“隐身劳动”到多元协作)。随后构建数据处理的类型化体系,包括四方面:阶段类型(从“生语料”到“归档数据集”的五阶段流程)、操作类型(形成包含采集、清洗、标注、脱敏、去重、切片、向量化等在内的“数据操作工具箱”)、范式类型(推动从“模型中心”向“数据中心”的范式转型),以及管理类型(建立覆盖全生命周期的治理框架)。最后指出,AI治理正迈向以数据为中心的新范式,需通过制度完善、产业协同、技术创新与监管强化实现系统性突破。; 适合人群:从事人工智能研发、数据治理、算法合规及相关政策研究的专业人员,尤其适用于AI企业技术管理者、数据科学家、法律合规从业者及政府监管部门人员。; 使用场景及目标:①理解AI训练数据获取的合法路径与产业协作模式;②掌握数据处理的全流程阶段划分与核心技术操作;③推动“数据为中心”的AI开发范式转型;④构建符合法律与伦理要求的全生命周期数据治理体系。; 阅读建议:此资源理论与实践结合紧密,建议读者结合实际项目中的数据采集、清洗、标注与合规流程进行对照学习,并重点关注“数据操作工具箱”与“数据中心AI”范式,以提升数据工程化能力和治理水平。
政府科技管理者在推动区域科技创新时,如何精准配置科技成果与产业需求?.docx
科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。
基于LADRC控制器(三阶扩张状态观测器)的永磁同步直线电机位置环控制matlab仿真
内容概要:本文详细介绍了基于LADRC控制器(三阶扩张状态观测器)的永磁同步直线电机位置环控制系统的Matlab仿真研究,系统阐述了该先进控制策略在高精度运动控制中的应用。文章围绕LADRC的核心思想——通过扩张状态观测器实时估计并补偿系统内部动态不确定性及外部扰动,从而显著提升控制系统的鲁棒性、抗干扰能力和动态响应性能展开论述。内容涵盖控制器的整体设计架构、三阶扩张状态观测器的数学建模与实现方法、非线性反馈控制律的构建、关键参数的整定策略,并通过Matlab/Simulink搭建完整的仿真模型,与传统PID控制进行了对比实验,充分验证了LADRC在抑制负载扰动、减小跟踪误差、加快响应速度等方面的优越性。; 适合人群:具备自动控制理论基础和Matlab/Simulink仿真经验的电气工程、自动化、机电一体化及相关专业的硕士研究生、博士研究生、科研人员及从事高性能电机驱动系统开发的工程技术人员。; 使用场景及目标:①用于高性能永磁同步直线电机控制系统的设计、分析与性能优化;②作为自抗扰控制(ADRC)及其变体(LADRC)算法的教学案例与科研仿真平台;③深入理解扩张状态观测器的工作机理及扰动补偿机制;④对比研究LADRC与传统PID等线性控制器在动态性能、鲁棒性方面的差异; 阅读建议:建议结合文中详述的仿真模型与参数设置进行动手实践,重点关注扩张状态观测器的设计过程与扰动估计的实时性,通过修改系统参数、引入不同类型的外部负载扰动来测试控制器的鲁棒性,并尝试调整观测器带宽与控制器带宽以观察其对系统性能的影响,从而深化对LADRC核心原理的理解。


