1.对象:无重复数字
2.查找代码
Bts_node* search_Bts(Bts_node *bt,int k){ if(bt==NULL||bt->data==k) return bt; if(kdata) return search_Bts(bt->lchild,k); else return search_Bts(bt->rchild,k); }
3.删除代码
void delete2(Bts_node *p,Bts_node *&r){ Bts_node *q; if(r->rchild!=NULL)//找到最大的节点(右边大),用while也许也行 delete2(p,r->rchild); else { p->data=r->data; q=r; r=r->lchild; delete(q); }}void delete1(Bts_node *&p){ Bts_node *q; if(p->rchild==NULL)//只有左子树 { q=p; p=p->lchild; delete(q); } else if(p->lchild==NULL)//只有右子树 { q=p; p=p->rchild; delete(q); } else delete2(p,p->lchild);}bool delete_Bts(Bts_node *&bt,int k){ if(bt==NULL) return false; else { if(kdata) return delete_Bts(bt->lchild,k); else if(k>bt->data) return delete_Bts(bt->rchild,k); else { delete1(bt); return true; } }}
4.实例:
#includeusing namespace std;struct Bts_node{ int data; Bts_node *lchild,*rchild;};bool insert_Bts(Bts_node *&bt,int k){ if(bt==NULL) { bt=new Bts_node; bt->data=k; bt->lchild=bt->rchild=NULL; } if(k==bt->data) return false; else { if(k>bt->data) insert_Bts(bt->rchild,k); else insert_Bts(bt->lchild,k); }}Bts_node *create_Bts(int n){ Bts_node *bt=NULL; for(int i=0;i >temp; insert_Bts(bt,temp); } return bt;}Bts_node* search_Bts(Bts_node *bt,int k,Bts_node *f,Bts_node *&f1){ if(bt==NULL) { f1=NULL; return NULL; } else if(bt->data==k) { f1=f; return bt; } else if(k data) return search_Bts(bt->lchild,k,bt,f1); else return search_Bts(bt->rchild,k,bt,f1);} void print(Bts_node *b1) { if(b1!=NULL) { cout< data; if(b1->lchild!=NULL||b1->rchild!=NULL) { cout<<"("; print(b1->lchild); if(b1->rchild!=NULL) { cout<<","; print(b1->rchild); } cout<<")"; } } }Bts_node* search_Bts(Bts_node *bt,int k){ if(bt==NULL||bt->data==k) return bt; if(k data) return search_Bts(bt->lchild,k); else return search_Bts(bt->rchild,k); }int main(){ Bts_node *bt,*f1; int n; cout<<"n="; cin>>n; bt=create_Bts(n); int k; cout<<"k="; cin>>k; cout< data< data<