zoukankan      html  css  js  c++  java
  • 关于二叉排序树 BST

      1 #include<stdio.h>
      2 #include<stdlib.h>
      3 
      4 typedef struct node
      5 {
      6     double w;
      7     struct node *l,*r;
      8 }*Node;
      9 
     10 void Build(Node &rt,double a)//建树
     11 {
     12     if(rt==NULL)
     13     {
     14         rt=new node;
     15         rt->w=a;
     16         rt->l=0;
     17         rt->r=0;
     18     }
     19     else
     20     {
     21         if(a<rt->w)
     22             Build(rt->l,a);
     23         else
     24             Build(rt->r,a);
     25     }
     26 }
     27 double fin(struct node *rt)  //找最小的权
     28 {
     29     if(!rt)
     30         return 0;
     31     else if(!rt->l)
     32         return rt->w;
     33     else
     34         return fin(rt->l);
     35 }
     36 
     37 void delet(Node &rt,double w)//删除权为w点
     38 {
     39     if(!rt)
     40     {
     41         printf("没有
    ");
     42         return ;
     43     }
     44     else if(rt->w<w)
     45         delet(rt->r,w);
     46     else if(rt->w>w)
     47         delet(rt->l,w);
     48     else if(rt->l&&rt->r)
     49     {
     50         struct node *tmp;
     51         tmp=rt;
     52         tmp->w=fin(tmp->r);
     53         delet(tmp->r,tmp->w);
     54     }
     55     else
     56     {
     57         struct node *t;
     58         t=rt;
     59         if(rt->l)
     60             rt=rt->l;
     61         else
     62             rt=rt->r;
     63         delete(t);
     64     }
     65 
     66 }
     67 void in(struct node *rt) //中序
     68 {
     69     if(rt)
     70     {
     71         in(rt->l);
     72         printf("%lf ",rt->w);
     73         in(rt->r);
     74     }
     75     else
     76         return ;
     77 }
     78 double w;
     79 int aim;
     80 
     81 void search(Node rt,int &cnt) //找第aim小
     82 {
     83     if(rt)
     84     {
     85         search(rt->l,cnt);
     86         cnt++;
     87         if(cnt==aim)
     88         {
     89             w=rt->w;
     90             return;
     91         }
     92         search(rt->r,cnt);
     93 
     94     }    
     95 }
     96 int main()
     97 {
     98     int n;
     99     scanf("%d",&n);
    100     struct node *root;
    101     root=0;
    102     for(int i=1;i<=n;i++) //插入
    103     {
    104         double a;
    105         scanf("%lf",&a);
    106         Build(root,a);
    107     }
    108     in(root);
    109     printf("
    ");
    110     scanf("%d",&n);
    111     for(int i=1;i<=n;i++)  //删除
    112     {
    113         double a;
    114         scanf("%lf",&a);
    115         delet(root,a);
    116         in(root);
    117         printf("
    ");
    118     }
    119     scanf("%d",&n);
    120     for(int i=1;i<=n;i++)
    121     {
    122         scanf("%d",&aim);  //第aim小
    123         int cnt=0;
    124         search(root,cnt);
    125         printf("%lf
    ",w);
    126     }
    127     return 0;
    128 }
    129 /*
    130 9
    131 3 4 2 5 7 6 3.5 3.1 3.6
    132 0
    133 3
    134 6
    135 7
    136 3
    137 
    138 */
  • 相关阅读:
    【BZOJ 2124】【CodeVS 1283】等差子序列
    【BZOJ 1036】【ZJOI 2008】树的统计Count
    【BZOJ 1901】【ZJU 2112】Dynamic Rankings
    【BZOJ 3924】【ZJOI 2015】幻想乡战略游戏
    【BZOJ 4103】【THUSC 2015】异或运算
    【BZOJ 4513】【SDOI 2016】储能表
    【HDU 3622】Bomb Game
    【BZOJ 3166】【HEOI 2013】Alo
    【BZOJ 3530】【SDOI 2014】数数
    【BZOJ 4567】【SCOI 2016】背单词
  • 原文地址:https://www.cnblogs.com/cherryMJY/p/6105244.html
Copyright © 2011-2022 走看看