[数据结构] 二叉搜索树的CURD(增删改查)操作
时间:2022-07-22
本文章向大家介绍[数据结构] 二叉搜索树的CURD(增删改查)操作,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
介绍
对于二叉搜索树的查找指定元素、查找最大元素、查找最小元素、删除指定元素、插入元素等基础操作。除了删除操作外,基本上都是使用的非递归函数解决。
Code
#include<stdio.h>
#include<stdlib.h>
// 二叉搜索树的各种操作 By Titan
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode {
int Data;
Position Left;
Position Right;
};
//插入操作
BinTree Insert(BinTree BST,int X) {
if(!BST) {
BST = (BinTree)malloc(sizeof(struct TNode));
BST->Data=X;
BST->Left=BST->Right=NULL;
} else {
BinTree Parent,Cur=BST;
while(Cur) {
Parent=Cur;
if(Cur->Data > X) {
Cur=Cur->Left;
} else if(Cur->Data < X) {
Cur=Cur->Right;
} else {
return BST;
}
}
BinTree TempNode = (BinTree)malloc(sizeof(struct TNode));
TempNode->Data=X;
TempNode->Left=TempNode->Right=NULL;
if(Parent->Data>X) {
Parent->Left=TempNode;
} else {
Parent->Right=TempNode;
}
}
return BST;
}
//查找操作
//基础查找
BinTree Find(BinTree BST,int X) {
if(!BST) {
return NULL;
}
BinTree Found=NULL;
while(BST) {
if(BST->Data > X ) {
BST=BST->Left;
} else if(BST->Data < X) {
BST=BST->Right;
} else if(BST->Data == X) {
Found=BST;
break;
}
}
return Found;
}
//找最小值
BinTree FindMin(BinTree BST) {
if(!BST) {
return NULL;
}
while(BST->Left) {
BST=BST->Left;
}
return BST;
}
//找最大值
BinTree FindMax(BinTree BST) {
if(!BST) {
return NULL;
}
while(BST->Right) {
BST=BST->Right;
}
return BST;
}
// 删除操作
BinTree Delete(BinTree BST,int X) {
Position Tmp;
if( !BST ) {
printf("Not Foundn");
} else {
if( X < BST->Data ) {
BST->Left = Delete( BST->Left, X );
} else if( X > BST->Data ) {
BST->Right = Delete( BST->Right, X );
} else {
if( BST->Left && BST->Right ) {
Tmp = FindMin( BST->Right );
BST->Data = Tmp->Data;
BST->Right = Delete( BST->Right, BST->Data );
} else {
if( !BST->Left ) {
BST = BST->Right;
} else {
BST = BST->Left;
}
}
}
}
return BST;
}
//先序遍历
void preOrder(BinTree BST) {
if(BST) {
printf("%d ",BST->Data);
preOrder(BST->Left);
preOrder(BST->Right);
}
}
int main(void) {
int n,tempX;
BinTree BST=NULL;
// 数据读入,建立二叉树
scanf("%d",&n);
for(int i=0; i<n; i++) {
scanf("%d",&tempX);
BST = Insert(BST,tempX);
}
// 先序遍历
preOrder(BST);
printf("n");
// 寻找某个元素
int toFind;
printf("请输入要查找的元素:");
scanf("%d",&toFind);
BinTree FoundNode = Find(BST,toFind);
if(FoundNode) {
printf("%d is Found.n",toFind,FoundNode);
} else {
printf("%d Not Found!n",toFind);
}
// 寻找最大值
BinTree FoundMax=FindMax(BST);
if(FoundMax) {
printf("Max: %d.n",FoundMax->Data,FoundMax);
} else {
printf("Find Max ERROR!n");
}
// 寻找最小值
BinTree FoundMin=FindMin(BST);
if(FoundMin) {
printf("Min: %d.n",FoundMin->Data,FoundMin);
} else {
printf("Find Min ERROR!n");
}
// 删除元素
int target;
printf("请输入要删除的元素: ");
scanf("%d",&target);
BST = Delete(BST,target);
preOrder(BST);
}
- 一行代码,Pandas秒变分布式,快速处理TB级数据
- 机器学习算法实现解析——word2vec源码解析
- 从零开始创建一个基于Go语言的web service
- 转--Golang项目邮件发送模块代码分享
- 虚拟化平台cloudstack(8)——从UI开始
- 使用oracle的大数据工具ODCH访问HDFS数据文件
- UWP基础教程 - XAML开篇
- UWP基础教程 - XAML依赖属性和附加属性
- GO语言学习:动态Web
- Golang 连接mssql sql server
- UWP基础教程 - XAML对象元素和属性
- UWP基础教程 - 禁用&开启截取应用屏幕
- Android开发中应该避免的内存泄露
- UWP基础教程 - XAML资源
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 自建KMS服务器 | 持续激活Windows
- 路由交换之静态路由
- Java面试基本问题
- 利用redis写webshell
- python富文本XSS过滤器
- PHP Multipart/form-data remote DOS 防御方案研究
- Kubernetes Python Client
- 对JiaThis Flash XSS的挖掘与分析
- Spark 3.0.1 Structured Streaming 提交程序异常解决
- 一起来探索下小程序包的魔数
- 新浪微博IPAD客户端XSS(file域) + 构造Worm
- Firefox 31~34远程命令执行漏洞的分析
- emlog绕过验证码刷评论
- cmseasy最新注入+360webscan的绕过分析
- 新型任意文件读取漏洞的研究