📄 bst.c
字号:
#include <stdio.h>#include <stdlib.h>#include <time.h>typedef struct node *link;struct node { int item; link l, r;};link NODE(int item, link l, link r){ link t = malloc(sizeof *t); t->item = item; t->l = l; t->r = r; return t;}int bst_search(link t, int item){ if(!t) return 0; if(item < t->item) return bst_search(t->l, item); if(item > t->item) return bst_search(t->r, item); return 1;}link bst_insert(link t, int item){ if(!t) return NODE(item, NULL, NULL); if(item < t->item) t->l = bst_insert(t->l, item); else if(item > t->item) t->r = bst_insert(t->r, item); return t;}link bst_delete_first(link t, int item){ link p; if(!t) return NULL; if(item < t->item) t->l = bst_delete(t->l, item); else if(item > t->item) t->r = bst_delete(t->r, item); else { if((t->l == NULL) && (t->r == NULL)) { free(t); t = NULL; } else if(t->l) { for(p = t->l; p->r; p = p->r) ; t->item = p->item; t->l = bst_delete(t->l, t->item); } else if (t->r) { for (p = t->r; p->l; p = p->l) ; t->item = p->item; t->r = bst_delete(t->r, t->item); } } return t;}/*link bst_delete_second(link t, int item){ link x, p; if(t == NULL) return 0; if(item < t->item) bst_delete_second(t->l, item); else if(item > t->item) bst_delete_second(t->r, item); else { if((t->l == NULL) && (t->r == NULL)) { free(t); t = NULL; } else if(t->l) { for(x = root; x->*/void pprint(link t){ if (t) { printf("("); printf("%d", t->item); pprint(t->l); pprint(t->r); printf(")"); } else printf("( )");}void in_order(link t){ if (!t) return; in_order(t->l); printf("%4d", t->item); in_order(t->r);}#define RANGE 100#define N 16int main(){ int i, item; link T = NULL; srand(time(NULL)); for (i=0; i<N; i++) T = bst_insert(T, rand()%RANGE); in_order(T); printf("\n\n"); printf(" \\tree"); pprint(T); printf("\n\n"); while (T) { item = rand()%RANGE; if (bst_search(T, item)) { printf("delete %d in tree\n", item); T = bst_delete(T, item); in_order(T); printf("\n\n"); printf(" \\tree"); pprint(T); printf("\n\n"); } } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -