C语言实现常用数据结构——二叉查找树
#include<stdio.h> #include<stdlib.h> #define SIZE 10 typedef struct Tree { int data; struct Tree *left; struct Tree *right; } tree; int find(tree *t,int x) { int i=0; if(t==NULL) { return -1; } if(t->data==x) { return i; } else if(x<t->data) { i++; find(t->left,x); } else if(x>t->data) { i++; find(t->right,x); } } tree *findMin(tree *t) { if(t==NULL) { return NULL; } else if(t->left==NULL) { return t; } else { return findMin(t->left); } } int findMax(tree *t) { if(t!=NULL) { while(t->right!=NULL) { t=t->right; } } return t->data; } tree *init(tree *t,int x) { if(t==NULL) { t=malloc(sizeof(tree)); t->data=x; t->left=NULL; t->right=NULL; return t; } else if(t->left ==NULL) { t->left=init(t->left,x); return t; } else { t->right=init(t->right,x); return t; } } tree *insertSort(tree *t,int x) { if(t==NULL) { t=malloc(sizeof(tree)); t->data=x; t->left=NULL; t->right=NULL; } else if(x < t->data) { t->left=insertSort(t->left,x); } else if(x > t->data) { t->right=insertSort(t->right,x); } return t; } tree *delete(tree *t,int x) { tree *temp; if(t==NULL) { printf("error,element not found!"); } else if( x < t->data ) {/*go left*/ t->left=delete(t->left,x); } else if( x > t->data ) {/*go right*/ t->right=delete( t->right,x ); } else if( t->left && t->right) { /*t->data==x and t has two children*/ temp=findMin( t->right ); t->data=temp->data; t->right=delete( t->right,t->data ); } else {/*one or zero children */ temp=t; if( t->left==NULL) { t=t->right; } else if( t->right == NULL ) { t=t->left; } free(temp); } return t; } void preTravel(tree *t) { if(t==NULL) { return; } printf("%d ",t->data); preTravel(t->left); preTravel(t->right); } void midTravel(tree *t) { if(t==NULL) { return; } midTravel(t->left); printf("%d ",t->data); midTravel(t->right); } void postTravel(tree *t) { if(t==NULL) { return; } postTravel(t->left); postTravel(t->right); printf("%d ",t->data); } main() { tree *t; int i; for(i=0; i<SIZE; i++) { t=init(t,i); } preTravel(t); printf("\n"); midTravel(t); printf("\n"); postTravel(t); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端