COJ1005(Binary Search Tree analog)
二分查找树的模拟。不能用数组模拟,那样内存会爆掉。

1 #include <stdio.h> 2 #define N 1000 3 struct node 4 { 5 int x; 6 struct node *left,*right; 7 }node[N]; 8 char f; 9 void Insert(struct node *r,struct node *p) 10 { 11 if(!r) return; 12 if(r->x>p->x) 13 { 14 if(r->left) Insert(r->left,p); 15 else r->left=p; 16 } 17 else 18 { 19 if(r->right) Insert(r->right,p); 20 else r->right=p; 21 } 22 } 23 void pretral(struct node *p) 24 { 25 if(!p) return; 26 if(f) printf("%d",p->x),f=0; 27 else printf(" %d",p->x); 28 pretral(p->left); 29 pretral(p->right); 30 } 31 void intral(struct node *p) 32 { 33 if(!p) return; 34 intral(p->left); 35 if(f) printf("%d",p->x),f=0; 36 else printf(" %d",p->x); 37 intral(p->right); 38 } 39 void postod(struct node *p) 40 { 41 if(!p) return; 42 postod(p->left); 43 postod(p->right); 44 if(f) printf("%d",p->x),f=0; 45 else printf(" %d",p->x); 46 } 47 int main() 48 { 49 int t,i,n,x; 50 struct node root; 51 struct node *p; 52 scanf("%d",&t); 53 while(t--) 54 { 55 scanf("%d",&n); 56 scanf("%d",&root.x); 57 root.left=root.right=0; 58 for(i=0;i<n-1;i++) 59 { 60 scanf("%d",&x); 61 p=&node[i]; 62 p->x=x; 63 p->left=p->right=0; 64 Insert(&root,p); 65 } 66 f=1; 67 pretral(&root); 68 printf("\n"); 69 f=1; 70 intral(&root); 71 printf("\n"); 72 f=1; 73 postod(&root); 74 printf("\n"); 75 printf("\n"); 76 } 77 return 0; 78 }
分类:
ACM题解
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 别做抢活的导演:代码中的抽象层次原则
· 从 Redis 客户端超时到 .NET 线程池挑战
· C23和C++26的#embed嵌入资源指南
· 「EF Core」框架是如何识别实体类的属性和主键的
· 独立开发,这条路可行吗?
· 他没买 iPad,而是花了半年时间,为所有“穷学生”写了个笔记神器
· Visual Studio 现已支持新的、更简洁的解决方案文件(slnx)格式
· 从 Redis 客户端超时到 .NET 线程池挑战:饥饿、窃取与阻塞的全景解析
· 2025年中总结:我想我克服公众演讲的恐惧了,一个社恐分子突破自我的故事
· 3.1k star!推荐一款开源基于AI实现的浏览器自动化插件工具 !