*BST(二叉搜索树)

来源:互联网 发布:51单片机毕业设计题库 编辑:程序博客网 时间:2024/05/20 20:48
今天是2017/5/22,DCDCBigBig的第十篇博文

BST

//这tm是什么鬼啊。。。好像是N年前的东西了吧。。。#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<cmath>#define nil NULLusing namespace std;struct point{    int data;    point *lc;    point *rc;    int num;};point *root;void ins(point* &t,int x){    if(t==nil){        t=(point *)malloc(sizeof(point));        t->data=x;        t->lc=nil;        t->rc=nil;        t->num=1;    }else{        if(x<t->data){ins(t->lc,x);}        if(x>t->data){ins(t->rc,x);}        if(x==t->data){t->num++;}    }}void write(point *t){    if(t==nil){return;}    write(t->lc);    for(int i=1;i<=t->num;i++){        printf("%d ",t->data);    }    write(t->rc);}void wwrite(point *t){    if(t==nil){return;}    printf("(");    wwrite(t->lc);    printf("%d",t->data);    wwrite(t->rc);    printf(")");}point *fi(point *t,int x){    if(t==nil){return nil;}    if(t->data==x){return t;}    if(t->data>x){return fi(t->lc,x);}    if(t->data<x){return fi(t->rc,x);}}int find_min(point *t){    if(t->lc==nil){return t->data;}    return find_min(t->lc);}int find_max(point *t){    if(t->rc==nil){return t->data;}    return find_max(t->rc);}int main(){    char n;    int m;    while(true){        cin>>n;        if(n=='I'){            scanf("%d\n",&m);            ins(root,m);        }else if(n=='W'){            write(root);            printf("\n");        }else if(n=='P'){            wwrite(root);            printf("\n");        }else if(n=='E'){            break;        }else if(n=='B'){            if(root!=nil){                printf("%d\n",find_max(root));            }else{cout<<endl;}        }else if(n=='S'){            if(root!=nil){                printf("%d\n",find_min(root));            }else{cout<<endl;}        }else if(n=='C'){            root=nil;        }else{            printf("It isn't a right letter!\n");        }    }    return 0;}

原创粉丝点击