int main() { node * curr; char input[15]; printf("Creating binary tree..."); makeempty(); printf("\tDone\n\n"); char delims[] = " "; char *result = NULL; char *item = NULL; while (1){ printf("What would you like to do?\n[help for list of commands]\n"); gets(input); search_count = 0; result = (char *) strtok( input, delims ); if(!strcmp("insert", result)) { item = (char *) strtok( NULL, delims ); if( !find(root, atoi(item)) ) { curr = (node *)malloc(sizeof(node)); curr->left = curr->right = NULL; curr->val = atoi(item); insert(&root, curr); printout(root); } else printf("Value %d exists\n\n", atoi(item)); continue; } if(!strcmp("delete", result)) { item = (char *) strtok( NULL, delims ); if( find(root, atoi(item)) ) { printf("Found value %d \n", atoi(item)); deleteval( root , atoi(item) ); printf("Value %d deleted\n\n", atoi(item)); } else printf("Value %d does not exist\n\n", atoi(item)); continue; } if(!strcmp("search", result)) { item = (char *) strtok( NULL, delims ); if( find(root, atoi(item)) ) { printf("Found value %d - %d nodes walked\n\n", atoi(item), search_count); } else printf("Value %d does not exist\n\n", atoi(item)); continue; } if(!strcmp("max", result)) { if(root != NULL) printf("Max value: %d\n\n", max(root)); else printf("Search tree is empty\n\n"); continue; } if(!strcmp("succ", result)) { item = (char *) strtok( NULL, delims ); int x, tree_max; if( root == NULL ) { printf("Search tree is empty\n\n"); continue; } x = succ( root , atoi(item) , NULL); if(x==NULL) { printf("Value %d is larger than any other value in tree\n\n", atoi(item)); continue; //printf("Value's %d next larger value is %d\n\n", atoi(item) , x ); } else if ( x == atoi(item) ) { printf("Value %d is the largest value in tree\n\n", atoi(item)); continue; //printf("Value's %d next larger value is %d\n\n", atoi(item) , x ); } else { printf("Value %d is the next larger value of %d\n\n", x , atoi(item)); continue; } continue; } if(!strcmp("subtree", result)){ result = strtok( NULL, delims ); if(!strcmp("leaves", result)){ item = (char *) strtok( NULL, delims ); if( find(root, atoi(item)) ) { find_print(root, atoi(item)); } else printf("Value %d does not exist\n\n", atoi(item)); continue; } else { printf("Please give a valid command\n\n"); continue; } } if(!strcmp("exit", result)){ printf("Destroing tree...\t"); //printf("\n"); tree_destroy(root); printf("Done\n\n"); printf("Bye bye!\n\n\n"); break; } if(!strcmp("help", result)){ printf("\nList of commands: \ninsert x \ndelete x \nsearch x \nmax \nsucc x \nsubtree leaves x \nexit \n\n"); continue; } printf("Please give a valid command\n\n"); } //sleep(1000); return 0; }
int find(st_info *buf_head,const int flag_num) { char check[21]; st_info *p1 = buf_head,*p2 = NULL,*p3 = NULL; find_link *q1,*q2,*find_head=NULL; unsigned int flag_find = 0; system("cls"); switch (flag_num) { case 0:print_tips(" 查询学生体检信息 ");break; case 2:print_tips(" 修改学生体检信息 ");break; case 1:print_tips(" 删除学生体检信息 ");break; } if(buf_head->next == NULL) { printf("\n Error!-----没有数据可供查询!请录入!"); return 0; } printf("\n\n\n\n Tips:-----请输入姓名或者学号:"); fflush(stdin); scanf("%20s",check); print_star(); printf(menu_print); while (p1->next) { p2 = p1; p1 = p1->next; if(strcmp(p1->name,check) == 0 || strcmp(p1->num,check) == 0) { ++flag_find; if(flag_find == 1) { find_head = (find_link *)malloc(M); q1 = (find_link *)malloc(M); find_head->next = q1; } q1->buf_find = p2; q2 = q1; q1 = (find_link *)malloc(M); q2->next = q1; } } if(flag_find != 0) { free(q1); q2->next = NULL; } printf("\n\n"); if(flag_find > 10) { free_find(find_head); printf("\n\n Warning!-----系统检测到您的查询结果已超过10个,数据文件可能存在问题!请检查!"); return 0; } find_print(find_head,flag_find); if(find_head == NULL) { return 0; } switch (flag_num) { case 0:free_find(find_head);break; case 1:del_info(find_head,flag_find);free_find(find_head);break; case 2:change_info(find_head,flag_find);free_find(find_head);break; } return 1; }
void find_print(node * t, int x ) { if(t->val==x) printout(t); if(x<t->val) return find_print(t->left, x); if(x>t->val) return find_print(t->right, x); }