struct node { int data; node* lchild; node* rchild; node() {} node( int a):data(a),lchild(NULL),rchild(NULL) { } }; void search(node* root, int x) { //查找 if (root==NULL) { cout<< "Fail" <<endl; return ; } if (root->data==x) { cout<<root->data<<endl; } else if (x<root->data) { search(root->lchild,x); } else { search(root->rchild,x); } } void Insert(node* & root, int x) { //插入 if (root==NULL) { node* n= new node(x); return ; } if (x==root->data) { return ; } if (x<root->lchild) { Insert(root->lchild,x); } else { Insert(root->rchild,x); } } node* create( int * a, int n) { //建立 node* root=NULL; //注意空根结点的建立 for ( int i= 0 ; i<n; i++) { Insert(root,a[i]); } return root; } node* Max(node* root) { //左子树最大值,从左子树根结点 while (root-rchild!=NULL) { Max(root->rchild); } return root; } node* Min(node* root) { //右子树最大值,从右子树根结点 while (root->lchild!=NULL) { Min(root->lchild); } return root; } void del(node* root, int x) { //删除 if (root==NULL) return ; if (root->data==x) { if (root->lchild==NULL&&root->rchild==NULL) { root=NULL; } else if (root->lchild!=NULL) { node* pre=Max(root->lchild); root->data=pre->data; del(root->lchild,pre->data); } else { node* next=Min(root->rchild); root->data=next->data; del(root->rchild,next->data); } } else if (x>root->data) { del(root->rchild,x); } else { del(root->lchild,x); } } |