lchild=p->lchild; /*用*p的左子树代替*p*/Р }Р else{Р f->rchild=p->lchild;Р }Р free(p);Р?}Р?else if(p->lchild!=NULL&&p->rchild!=NULL){ /**p既有左子树又有右子树*/Р q=p;Р s=p->lchild;Р while(s->rchild){Р q=s;Р s=s->rchild;Р }Р p->key=s->key;Р if(q!=p){Р q->rchild=s->lchild;Р }Р else{Р q->lchild=s->lchild;Р }Р free(s);Р?}Р}Рvoid main(){Р?BiTree t=NULL,p;Р?int key;Р?InitBiTree(&t);Р?printf("请输入关键字的值,以0结束:");Р?scanf("%d",&key);Р?while(key){Р InsertBST(&t,key);Р scanf("%d",&key);Р?}Р?printf("中序遍历建立的二叉排序树的序列为:");Р?InorderBiTree(t);Р?printf("\n");Р?printf("请输入要删除的结点的关键字的值:\n");Р?scanf("%d",&key);Р?DelBST(&t,key);Р?printf("删除后的二叉排序树的中序序列为:");Р?InorderBiTree(t);Р?printf("\n");Р?printf("请输入要查找的结点的关键字的值:\n");Р?scanf("%d",&key);Р?p=SearchBST(t,key);Р?if(p==NULL){Р printf("没有查找到该结点\n");Р?}Р?else{Р printf("查找到该结点\n");Р?}Р}