.7 二叉查找树的 建立 insert search remove 操作
1 //二叉查找树的建立,插入,删除操作 2 #include<stdio.h> 3 #include<stdlib.h> 4 5 typedef struct bsTree 6 { 7 int k ; 8 struct bsTree * lchild , * rchild ; 9 }bstnode , * bstree ; 10 11 void create_tree(bstree *T,int k1) 12 { 13 (*T) = (bstree)malloc(sizeof(bstnode)); 14 if(!(*T)){ 15 fprintf(stderr , "malloc error!\n"); 16 exit(EXIT_FAILURE) ; 17 } 18 (*T)->k = k1 ; 19 (*T)->lchild = (*T)->rchild = NULL; 20 } 21 22 bstree search(bstree T , int k ) //递归搜寻某个关键字为k 的节点 23 { 24 if(!T) return NULL; 25 if(k == T->k) return T ; 26 if(k < T->k) return search(T->lchild , k ) ; 27 if(k > T->k) return search(T->rchild , k ) ; 28 } 29 30 bstnode *itersearch(bstree T , int k ) //非递归搜寻某个关键字为k 的节点 31 { 32 while(T){ 33 if(k == T->k) return T ; 34 if(k < T->k) T = T->lchild ; 35 else T = T->rchild ; 36 } 37 return NULL; 38 } 39 40 bstree modifiedSearch(bstree T , int k1 ) //改进的搜寻 返回要insert的位置的上一个节点,用于插入操作 41 { 42 bstree pre = T ; 43 while(T){ 44 if(k1 == T->k) return T ; 45 pre = T ; 46 if(k1 < T->k) T = T->lchild ; 47 else T = T->rchild ; 48 } 49 return pre; 50 } 51 52 bstree modifiedSearch2(bstree T , int k1 ) //改进的搜寻 返回要insert的位置的上一个节点 用于删除操作 53 { 54 bstree pre = T ; 55 while(T){ 56 if(k1 == T->k) return pre ; 57 pre = T ; 58 if(k1 < T->k) T = T->lchild ; 59 else T = T->rchild ; 60 } 61 return NULL; 62 } 63 64 void insert(bstree T , bstree * tmp ,int k1 ) //插入操作 要用到modifiedSearch()函数 65 { 66 bstree ptr ; 67 (*tmp) = modifiedSearch(T,k1); 68 if( *tmp ){ 69 ptr = (bstree)malloc(sizeof(bstnode)) ; 70 ptr->k = k1 ; 71 ptr->lchild = ptr->rchild = NULL ; 72 if(k1 < (*tmp)->k) (*tmp)->lchild = ptr ; 73 else (*tmp)->rchild = ptr ; 74 } 75 } 76 77 void in_order_traverse(bstree T) // 中序遍历 查找树 78 { 79 if(T){ 80 81 in_order_traverse(T->lchild) ; 82 printf("%d ",T->k) ; 83 in_order_traverse(T->rchild) ; 84 } 85 } 86 87 bstree remove1( bstree T , int k1) 88 { 89 int f ;bstree Rf = T,R = NULL; 90 Rf = modifiedSearch2(T,k1) ; 91 if(k1 > Rf->k ) { 92 f = 1 ; R = Rf->rchild ; 93 }else{ 94 f = 0 ; R = Rf->lchild ; 95 } 96 97 if(!R->lchild && !R->rchild){ 98 if(f) Rf->rchild = NULL ;else Rf->lchild = NULL ; 99 } 100 else if(R->lchild || R->rchild ){ 101 if(f) Rf->rchild = NULL ;else Rf->lchild = NULL ; 102 } 103 else { 104 bstree tmp = R; 105 while( tmp->lchild) 106 tmp = R->lchild ; 107 R->k = tmp->k ; 108 R->lchild = NULL ; 109 } 110 return R ; 111 } 112 113 int main() 114 { 115 bstree T ; 116 int i ; 117 create_tree(&T , 30) ; 118 bstree tmp ; 119 tmp = (bstree)malloc(sizeof(bstnode)) ; 120 insert(T , &tmp ,5) ; 121 bstree tmp1 ; 122 tmp1 = (bstree)malloc(sizeof(bstnode)) ; 123 insert(T , &tmp1 ,40) ; 124 bstree tmp2 ; 125 tmp2 = (bstree)malloc(sizeof(bstnode)) ; 126 insert(T , &tmp2 ,35) ; 127 bstree tmp3 ; 128 tmp3 = (bstree)malloc(sizeof(bstnode)) ; 129 insert(T , &tmp2 ,45) ; 130 remove1(T,40); 131 in_order_traverse(T); 132 return 0 ; 133 }
转载于:https://www.cnblogs.com/shaughn/p/3487930.html
.7 二叉查找树的 建立 insert search remove 操作相关推荐
- openlayers中使用rBush(R树)来存放要素等信息,本文修改了一点其中的rbush源码中的demo,使用canvas画出了insert和delete操作(建立树和删除树中数据)
openlayers中使用rBush(R树)来存放要素等信息,本文修改了一点其中的rbush源码中的demo,使用canvas画出了insert和delete操作(建立树和删除树中数据) 修改后的源代 ...
- 【java】在分页查询结果中对最后的结果集List进行操作add()或remove()操作,报错:java.lang.UnsupportedOperationException...
场景: 在分页查询结果中对最后的结果集List进行操作add()或remove()操作,报错:java.lang.UnsupportedOperationException 错误: java.lang ...
- 031 Rust死灵书之Vec实现insert和remove
介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source 详 ...
- 详解二叉排序树(二叉搜索树、二叉查找树)以及Python实现相关操作
二叉排序树 引言 1.定义 2.性质 3.操作 3.1 查找 3.2 插入 3.3 生成 3.4 删除 引言 如何更加高效的完成对数据的查询和添加操作,例如↓↓↓ 给你一个数列 (7, 3, 10, ...
- mysql insert or replace_mysql 操作总结 INSERT和REPLACE
言外之意,就是对数据进行修改.在标准的SQL中有3个语句,它们是INSERT.UPDATE以及DELETE.在MySQL中又多了一个REPLACE语句,因此,本文以MySQL为背景来讨论如何使有SQL ...
- 二叉查找树(BST Binary Search Tree)
二叉查找树的特点是什么? 左子树所有的节点都小于父节点,右子树所有的节点都大于父节点.投影到平面以后,就是一个有序的线性表. 二叉查找树既能够实现快速查找,又能够实现快速插入. 但是二叉查找树有一个问 ...
- ibatis insert mysql_iBATIS创建操作
iBATIS创建操作 若要使用iBATIS执行的任何CRUD(创建,写入,更新和删除)操作,需要创建一个的POJO(普通Java对象)类对应的表.本课程介绍的对象,将"模式"的数据 ...
- 将数组转换成集合Arrays.asList,不可进行add和remove操作的原因
直接上代码: import java.util.Arrays; import java.util.List;public class Test {public static void main(Str ...
- 中控考勤机 本地mysql_中控考勤机SQL数据库建立方法及常用操作
释放双眼,带上耳机,听听看~! 首先客户电脑上需要安装sqlserver数据库(2000或者是2005版本) 安装方法就不在这里介绍,下面说一下数据库的建立办法.(以2005版本为例) 1.打开数据库 ...
最新文章
- [WCF编程]1.WCF入门示例
- banana pi BPI-R1 原理图下载地址:
- php开源 饭馆记账软件_GitHub - CNYoki/xxjzWeb: 小歆记账WebApp项目(Web服务端)
- jquery常用功能
- List集合ArrayList,LinkList
- sklearn 中的线性回归、岭回归、Lasso回归参数配置及示例
- activemq 延时队列以及不生效问题
- html一个页面同时加载多个饼图,Html5饼图绘制实现统计图的方法
- 每日一题(31)—— 全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
- JSF和Facelets的lifecircle
- UVA - 753 A Plug for UNIX(网络流)
- 哈工大女孩学计算机毕业转行,2020考生切记,上985读这些专业,据说都是“坑”!...
- blob类型对象转为file类型对象
- 经典排序算法(八)--选择排序Selection Sort
- 土壤重金属含量分布、Cd镉含量、Cr、Pb、Cu、Zn、As和Hg、土壤采样点、土壤类型分布
- InstallShield2015创建安装包
- 通过JS代码实现Ping功能
- Android 手机安装有微信,还是提示未安装微信
- 使用阿里云物联网平台IoT Studio控制海康摄像头旋转
- 安卓锁屏密码忘记怎么办【超强解锁百分百有效!】
热门文章
- 又拍网架构-又一个用到python的网站(转载)
- python mongodb 设置密码前一篇ok,csv文件存入mongodb
- Spring中的Bean是如何被回收的?
- [Java] 蓝桥杯BASIC-13 基础练习 数列排序
- 1102. Invert a Binary Tree (25)-PAT甲级真题
- 1001. 害死人不偿命的(3n+1)猜想 (15)-PAT乙级真题
- 微型计算机基础知识,微型计算机的基础知识
- Docker常见命令---简易教程
- Java 用HTTP的方式发送JSON报文请求
- 最新快手面试题(含总结):设计模式+红黑树+Java锁+Redis等