#include#include typedef int ElemType; typedef struct node { ElemType data; struct node *lchild; struct node *rchild; } node, *BTree; void Insert(BTree *T, ElemType x) { BTree p, m, s; m = p = NULL; if (!Search(*T, x, &p, &m)) { s = (node *)malloc(sizeof(node)); s->data = x; s->lchild = NULL; s->rchild = NULL; if (!*T) *T = s; else { if (x < m->data) m->lchild = s; else m->rchild = s; } } } void Create(BTree *T) { ElemType x; printf("请输入若干整数构建BST,以 -1 结束:n"); *T = NULL; scanf("%d", &x); while (x != -1) { Insert(T, x); scanf("%d", &x); } } void Delete(BTree *T, ElemType x) { BTree p, f, s, s_parent; p = f = NULL; if (Search(*T, x, &p, &f)) { if (!p->lchild && !p->rchild) { if (p == *T) { *T = NULL; free(p); } else { if (p->data < f->data) f->lchild = NULL; else f->rchild = NULL; free(p); } } else if (!p->lchild && p->rchild) { if (p == *T) { *T = p->rchild; free(p); } else { if (p->data < f->data) f->lchild = p->rchild; else f->rchild = p->rchild; free(p); } } else if (p->lchild && !p->rchild) { if (p == *T) { *T = p->lchild; free(p); } else { if (p->data < f->data) f->lchild = p->lchild; else f->rchild = p->lchild; free(p); } } else { s_parent = p; s = p->lchild; while (s->rchild) { s_parent = s; s = s->rchild; } p->data = s->data; if (s_parent == p) s_parent->lchild = s->lchild; else s_parent->rchild = s->lchild; free(s); } } } int Search(BTree T, ElemType x, BTree *p, BTree *f) { *p = T; while (*p) { if ((*p)->data == x) return 1; else { if (x < (*p)->data) { *f = *p; *p = (*p)->lchild; } else { *f = *p; *p = (*p)->rchild; } } } return 0; } void Traverse(BTree T) { if (T) { Traverse(T->lchild); printf("%d, ", T->data); Traverse(T->rchild); } } int main() { int flag; int a,b,c; char t; BTree T, p, f; p = f = NULL; Create(&T); printf("遍历:"); Traverse(T); printf("n"); printf("请输入想要查找的数字(退出请输入-1):"); while(1) { scanf("%d",&c); if(c==-1) { break; } flag = Search(T, c, &p, &f); if (flag) printf("success,the value is%dn",c); else printf("unsuccessn"); } printf("输入想要插入的数字:"); scanf("%d",&a); Insert(&T, a); Traverse(T); printf("n"); printf("输入想要删除的数字:"); scanf("%d",&b); Delete(&T, b); Traverse(T); printf("n"); return 0; }



