#include<iostream>using namespace std;#define ENDFLAG '#'typedef struct ElemType{ char key;}ElemType;typedef struct BSTNode{ ElemType data; BSTNode *lchild,*rchild; }BSTNode,*BSTree;//查找BSTree SearchBST(BSTree T,char key) { if((!T)|| key==T->data.key) return T; else if (key<T->data.key) return SearchBST(T->lchild,key); else return SearchBST(T->rchild,key); }//插入void InsertBST(BSTree &T,ElemType e ) { if(!T) { BSTree S = new BSTNode; S->data = e; S->lchild = S->rchild = NULL; T =S; } else if (e.key< T->data.key) InsertBST(T->lchild, e ); else if (e.key> T->data.key) InsertBST(T->rchild, e); }//结构二叉排序树void CreateBST(BSTree &T ) { T=NULL; ElemType e; cin>>e.key; while(e.key!=ENDFLAG){ InsertBST(T, e); cin>>e.key; } }//删除void DeleteBST(BSTree &T,char key) { BSTree p=T;BSTree f=NULL; BSTree q; BSTree s; while(p){ if (p->data.key == key) break; f=p; if (p->data.key> key) p=p->lchild; else p=p->rchild; }if(!p) return; if ((p->lchild)&& (p->rchild)) { q = p; s = p->lchild; while (s->rchild) {q = s; s = s->rchild;} p->data = s->data; if(q!=p){ q->rchild = s->lchild; } else q->lchild = s->lchild; delete s; }else{ if(!p->rchild) { q = p; p = p->lchild; } else if(!p->lchild) { q = p; p = p->rchild; } if(!f) T=p; else if (q==f->lchild) f->lchild = p; else f->rchild = p; delete q; }}//中序遍历void InOrderTraverse(BSTree &T){ if(T){ InOrderTraverse(T->lchild); cout<<T->data.key; InOrderTraverse(T->rchild); }}int main(){ BSTree T; cout<<"输出若干字符 #完结:"; CreateBST(T); cout<<"有序二叉树中序遍历:"; InOrderTraverse(T); cout<<endl; char key; cout<<"待查找字符:"; cin>>key; BSTree result=SearchBST(T,key); if(result) {cout<<"找到字符"<<key<<endl;} else {cout<<"未找到字符"<<key<<endl;} cout<<"待删除字符:"; cin>>key; DeleteBST(T,key); cout<<"有序二叉树中序遍历:"; InOrderTraverse(T);}