顺序二叉树的删除(第二版本)

大家好我是新生小白,由于前面文章出版了bug所以在这个文章进行更新。主要错误地方为判断树里是否有要删除的元素的判断函数(look)出现错误,look里面循环条件出现错误!

以下是全新代码:

#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define MAXSIZE 100
typedef int Status;
typedef int ElemType;typedef struct bst{ElemType data;struct bst *lchild,*rchild;
}Node,*LinkBST;Status inincreadLinkBST(LinkBST &T,ElemType data)//添加节点元素 
{LinkBST p=new Node;if(!p)return ERROR;p->data=data;p->lchild=p->rchild=NULL;T=p;return OK;
}Status pushdata(LinkBST &T,ElemType data)//树插入元素 
{LinkBST p;if(T==NULL){inincreadLinkBST(T,data);return OK;}else{p=T;if(p->data>data)pushdata(T->lchild,data);else if(p->data<data)pushdata(T->rchild,data);else if(p->data==data)return ERROR;}
}void Delete(LinkBST &T,ElemType data,LinkBST &parents);//声明删除函数 ElemType BST_lchild_max(LinkBST &T)//找树的左子树的最大节点返回元素值,并删除 
{LinkBST p=T->lchild,pre=T;ElemType nv;if(p!=NULL)while(p->rchild!=NULL){pre=p;p=p->rchild;}nv=p->data;Delete(p,nv,pre);return nv;
}void Delete(LinkBST &T,ElemType data,LinkBST &parents)//删除元素内容 
{LinkBST p=T,q=parents;ElemType nv;if(p->data==data){if(!p->lchild&&!p->rchild){if(q==NULL){T=NULL;delete p;return ;}else if(q->data>data)q->lchild=NULL;elseq->rchild=NULL;return ;}else if(!p->lchild!=!p->rchild){if(p->lchild){if(q==NULL)T=T->lchild;else if(q->data>data)q->lchild=p->lchild;elseq->rchild=p->lchild;}else{if(q==NULL)T=T->rchild;else if(q->data>data)q->lchild=p->rchild;elseq->rchild=p->rchild;}delete p;return ;}else if(p->lchild&&p->rchild){nv=BST_lchild_max(T);p->data=nv;return ;}}else{while(p->data!=data){q=p;if(p->data>data)p=p->lchild;elsep=p->rchild;}Delete(p,data,q);}
}void pop(LinkBST T)
{LinkBST p=T;if(T==NULL)return;pop(p->lchild);cout<<p->data<<" ";pop(p->rchild);
}Status look_data(LinkBST T,ElemType data)
{LinkBST p=T;if(p==NULL)return ERROR;while(p!=NULL){if(p->data==data)return OK;else if(p->data>data)p=p->lchild;elsep=p->rchild;}return ERROR;
}main()
{int n,i;ElemType data[MAXSIZE],e;LinkBST T=NULL,parents=NULL;cin>>n;for(i=1;i<=n;i++){cin>>data[i];}for(i=1;i<=n;i++)pushdata(T,data[i]);cout<<"请输入要删除的元素:"<<endl;cin>>e;if(look_data(T,e))Delete(T,e,parents);elsecout<<"没有此元素!"<<endl;pop(T);
}

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

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

相关文章

Ollama配置webui连接大预言模型

Ollama配置Web UI连接大预言模型 默认ollama安装后&#xff0c;chat对话只有命令行界面&#xff0c;交互体验较差。借助open-webui可以通过web界面连接ollama&#xff0c;从而实现类似chatgpt式的web交互体验。 使用家用PC实践记录如下&#xff1a; 1. 环境配置 本次使用的操作…

笔记-mathtype公式在PDF或打印出来显示不全

原文中的公式&#xff1a; 纸质版打印出来的公式有缺失 问题描述&#xff1a;mathtype公式编辑器所编辑的公式转成PDF或者打印出来有缺失 以下是解决方法的具体描述。 目录 一、准备工作二、操作步骤 一、准备工作 1、工具&#xff1a;mathtype、微软word 二、操作步骤 …

html如何实现按钮跳转,以及访问随机跳转

html如何实现按钮跳转&#xff0c;以及访问随机跳转。 <!DOCTYPE html> <html> <head><title>访问者跳转模拟</title><script type"text/javascript">function redirectToPort() {// 基于时间或随机数生成端口号var basePort …

数据可视化在不同行业中有哪些应用?

数据可视化即通过图表的形式将数据的内在信息有逻辑性地呈现给用户&#xff0c;使用户更容易发现数据中蕴藏的规律&#xff0c;找出问题&#xff0c;进而做出决策&#xff1b;另一方面&#xff0c;数据可视化项目也是一张重要的名片&#xff0c;是企业数字化建设效果的呈现。本…

el-select下拉框修改背景色

效果图&#xff1a; 1.el-select标签添加teleported属性&#xff0c;并设置为false 2.设置css样式

c++ 原子操作

虽然原子操作通常被称为“无锁”&#xff0c;但实际上它们在内部可能使用了锁来保证操作的原子性。然而&#xff0c;与传统的锁相比&#xff0c;原子操作通常具有更轻量级的实现&#xff0c;因为它们只涉及一个共享变量&#xff0c;而不需要对整个临界区进行加锁。 原子操作通…

go的反射操作reflect实践

通过反射机制&#xff0c;找到相应的Left或者Right广告 type SearchAdsObj struct {Left PositionAdsObj json:"left"Right PositionAdsObj json:"right" }func getFieldByName(obj SearchAdsObj, fieldName string) (interface{}, error) {fmt.Pr…

偏微分方程算法之九点紧差分法

目录 一、研究目标 二、理论推导 三、算例实现 四、结论 一、研究目标 我们已经在专栏中介绍了椭圆型偏微分方程的五点菱形差分格式&#xff0c;这里我们继续以该方法为背景&#xff0c;探讨如何提高五点法的精度&#xff0c;即从二阶精度提升到四阶精度。 研究目标现继续以…

qt5-入门-2D绘图-基础

参考&#xff1a; QPainter_w3cschool https://www.w3cschool.cn/learnroadqt/k7zd1j4l.html C GUI Programming with Qt 4, Second Edition 本地环境&#xff1a; win10专业版&#xff0c;64位&#xff0c;Qt 5.12 代码已经测试通过。其他例子日后更新。 目录 基础知识penb…

高德地图API入门使用vue

文章目录 最终效果一、在高德的开放平台申请key二、下载依赖&#xff1a;三、完整代码 最终效果 页面显示高德地图 一、在高德的开放平台申请key 在高德的开放平台申请key&#xff1a; https://console.amap.com/dev/key/app 申请的类型为web端&#xff08;js api&#xff…

LeetCode45:跳跃游戏Ⅱ

题目描述 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n …

如何防止源代码泄露?6种企业防泄密解决方案

在数字化转型浪潮中&#xff0c;源代码成为企业宝贵的核心资产&#xff0c;其安全性直接关系到企业的生存和发展。源代码泄露不仅会导致商业秘密外泄&#xff0c;还可能造成严重的经济损失和品牌信誉下降。为此&#xff0c;采用高效的防泄密措施&#xff0c;如华企盾DSC数据防泄…

Redis使用手册之字符串

《Redis使用手册字符串设置》 目录 **《Redis使用手册字符串设置》**** SET&#xff1a;为字符串键设置值**** GETSET&#xff1a;获取旧值并设置新值**** MSET&#xff1a;一次为多个字符串键设置值**MGET&#xff1a;一次获取多个字符串键的值**** MSETNX&#xff1a;只在键不…

mySql 基础语法

几个关键字 like 1、%&#xff1a;是一个通配符&#xff0c;代表零个、一个或多个字符a. 查找&#xff0c;以特定字符串开头的值&#xff1a;SELECT * FROM 表名 WHERE 列名 LIKE 前缀%;b. 查找&#xff0c;以特定字符串结尾的值&#xff1a;SELECT * FROM 表名 WHERE 列名 LI…

php7.4在foreach中对使用数据使用无法??[]判读,无法使用引用传递

代码如下图&#xff1a;这样子在foreach中是无法修改class_history的。正确的应该是去掉??[]判断。 public function actionY(){$array [name>aaa,class_history>[[class_name>一班,class_num>1],[class_name>二班,class_num>2]]];foreach ($array[class_…

Linux环境下的编译和调试

本文目录 一、编译1. gcc/g编译器2. gcc/g安装3. 代码编译过程4. gcc编译 二、调试1. 下载gdb调试器2. gdb 调试器使用步骤 一、编译 1. gcc/g编译器 对于.c 格式的 C 文件&#xff0c;可以采用 gcc 或 g编译。 对于.cc、.cpp 格式的 C文件&#xff0c;应该采用 g进行编译。 …

密文域可逆信息隐藏技术综述(上)

加密图像可逆信息隐藏是一种加密原始图像后&#xff0c;在密文图像中可逆地隐藏附加数据&#xff0c;并且在数据提取后&#xff0c;原始图像可以被无损重建的技术。RDH-EI的分类如图1所示。 按对图像的加密方法&#xff0c;现有RDH-EI算法可分为对称加密域和非对称(公钥)加密域…

vue 配合 video.js 实现视频播放

1. 导入 video.js 包 npm install video.js -S npm install videojs-flash -S 2. 代码实现 <template><div><videoid"my-video"class"video-js"controlspreload"auto"width"640"height"264":poster&quo…

form1弹出子窗体form2,拖动子窗体判断是否离开父窗体区域,含源码(学习笔记)

一、效果&#xff08;进入和离开&#xff09; 子窗体到达父窗体边缘时变色。 二、代码分析 判断父窗体的目的&#xff0c;可以控制子窗体要随父窗体走。上面代码需要加以处理。 如&#xff1a;this.Location new Point(parentPoint.X distanceFromEdge, this.Location.Ydis…