#include<stdio.h> typedef struct tagNode { int data; struct tagNode *lchild; struct tagNode *rchild; }NODE,*PNODE; void Insert(PNODE &pNode,int &data) { if(pNode) { if(data>pNode->data) Insert(pNode->rchild,data); else if(data<pNode->data) Insert(pNode->lchild,data); return; } pNode=new NODE; pNode->lchild=NULL; pNode->rchild=NULL; pNode->data=data; } PNODE &FindMin(PNODE&pNode) { if(pNode) if(pNode->lchild) return FindMin( pNode->lchild); return pNode; } PNODE &Find(PNODE &pNode,int &data) { if(pNode) { if(data>pNode->data) return Find(pNode->rchild, data); else if(data<pNode->data) return Find(pNode->lchild, data); } return pNode; } void DeleteNode(PNODE &root,int&data) { PNODE &pNode=Find(root,data); if(pNode) { if(pNode->rchild==NULL) { pNode=pNode->lchild; delete pNode; } else { PNODE &p=FindMin( pNode->rchild); PNODE tmp=p; p=NULL; tmp->lchild=pNode->lchild; tmp->rchild=pNode->rchild; delete pNode; pNode=tmp; } } } int main() { int a[]={63,90,70,55,67,42,98,83,10,45,58}; int n,c; PNODE root=NULL ,tmp; for(int i=0;i<sizeof(a);i++) Insert(root,a[i]); printf("1------add a num/n"); printf("2------delete a num/n"); printf("3------find a num/n"); while(1) { printf("please input a case:/n"); scanf("%d" ,&c); switch(c) { case 1: printf("please input a number to add:/n"); scanf("%d",&n); Insert(root,n); break; case 2: printf("please input a number to delete:/n"); scanf("%d",&n); DeleteNode(root,n); break; case 3: printf("please input a number to find:/n"); scanf("%d" ,&n); tmp=Find(root,n); if(tmp!=NULL) printf("find%d/n ",tmp->data); else printf("not find/n"); break; } } return 0; }