晕了,真是好纠结,我在写完下面的代码后,才在网上找了找,居然发现和你的题目完全一样的代码,算了,我就直接发在网上找到的文档和代码给你吧,可怜我写了这么久代码呀。。。。。已发,请注意查收。代码写好了。VC下经测试通过。不过如果你还要论文之类的或者设计文档,我也比较难帮到你了。#include using namespace std;class node{public: node(int i):data(i),left(NULL),right(NULL){} void inorder(node *&root) //中序遍历,符合升序输出 { if(root!=NULL) { inorder(root->left); cout<data<<' '; inorder(root->right); } } void insert(node *&ptr,int item) //在查找树中插入元素 { if(ptr==NULL) ptr=new node(item); else if(itemdata) insert(ptr->left,item); else insert(ptr->right,item); } node *find(node *&ptr,int item) //在查找树中查找元素,找到返回所在结点指针,找不到返回空指针。 { if(ptr==NULL) return NULL; if(ptr->data==item) return ptr; else if(itemdata) find(ptr->left,item); else find(ptr->right,item); } node *&findy(node *&ptr,int item) //在查找树中查找肯定存在的元素,并返回其引用 { if(ptr->data==item) return ptr; else if(itemdata) findy(ptr->left,item); else findy(ptr->right,item); } node* rl(){return left;} node* rr(){return right;} void dele(node *&ptr) //删除值为item所在结点 { if(ptr->rl()==NULL&&ptr->rr()==NULL) ptr=NULL; else if(ptr->rr()==NULL) ptr=ptr->rl(); else ptr=ptr->rr(); }private: int data; node *left; //左孩子结点 node *right; //右孩子结点};int main(){ int t,i=0,j; cout<<"输入数字个数(结点个数):"; cin>>t; cout<<"输入"<>j; node *x=new node(j); for(;i>j; x->insert(x,j); } cout<<"中序遍历为:"; x->inorder(x); //作中序遍历 cout<<"\n输入操作(当输入-1时程序结束):"<>j; while(j!=-1) { node *t=x->find(x,j); //定位结点 if(t!=NULL) { node *&y=x->findy(x,j); x->dele(y); cout<<"中序遍历为:"; x->inorder(x); } else cout<<"无"<>j; } return 0;}附测试数据一组822 33 1 50 88 99 77 5533505155-1有什么不明的话可以M我或者留言我。