#include <stdio.h> #include <stdlib.h> #include <unistd.h> typedef struct node{ int key; int data; struct node *left; struct node *right; }NODE; NODE *root = NULL; enum{ RAND_min = 0, RAND_max = 1000 }; int Rand(int min,int max) { static int flag; if(!flag){ srand((unsigned int)time(NULL)); flag = 1; } return (max - min + 1) * (float)rand()/RAND_MAX + min; } NODE *insert(int key) { NODE **p,*new; p = &root; while(*p != NULL){ if(key == (*p)->key){ return NULL; }else if(key < (*p)->key){ p = &(*p)->left; }else{ p = &(*p)->right; } } if((new = malloc(sizeof(NODE))) == NULL){ fprintf(stderr,"Error:Cannot allocate memory"); exit(1); } new->left = NULL; new->right = NULL; new->key = key; new->data = Rand(RAND_min,RAND_max); *p = new; return new; } void init() { int i; NODE *p; for(i = 0;i < 10; i++){ if((p = insert(i)) == NULL){ fprintf(stderr,"Error:insert"); exit(1); } printf("Node key:%d data:%d\n",p->key,p->data); } } NODE *search(int key) { NODE *p; p = root; while(p != NULL){ if(key == p->key){ return p; }else if(key < p->key){ p = p->left; }else{ p = p->right; } } return NULL; } int main(int argc,char *argv[]) { init(); int key = atoi(argv[1]); fprintf(stdout,"check:key:%d\n",key); NODE *p; p = search(key); if(p != NULL){ printf("Data found : key %d data %d \n",p->key,p->data); }else{ printf("Not found\n"); } return 0; }
参考文献