本文共 2691 字,大约阅读时间需要 8 分钟。
#includeusing namespace std;const int MAX=1000;typedef struct NODE{ int data; struct NODE *left; struct NODE *right;} NODE,*TREE;TREE build(TREE tree,int x){ if(!tree) { tree=(NODE*)malloc(sizeof(NODE)); tree->data=x; tree->left=NULL; tree->right=NULL; } else if(tree->data>x) tree->left=build(tree->left,x); else tree->right=build(tree->right,x); return tree;}bool judge(TREE base_tree,TREE tree){ if(base_tree==NULL&&tree==NULL) return true; else if(base_tree==NULL&&tree!=NULL) return false; else if(base_tree!=NULL&&tree==NULL) return false; else { if(base_tree->data==tree->data) return judge(base_tree->left,tree->left)&&judge(base_tree->right,tree->right); return false; }}bool find(TREE T,int x,TREE father,TREE &p){ if(!T) { p=f; return false; } if(T->data==x) { p=t; return true; } else if(x data) return find(T->left,x,T,p); else return find(T->right,x,T,p);}bool insert(TREE T,int x){ TREE p; if(!find(T,x,NULL,p)) { NODE *a=(NODE*)malloc(sizeof(NODE)); a->data=x; a->right=a->left=NULL; if(!p) T=a; else if(x data) p->left=s; else p->right=s; return true; } return false;}bool Delete(TREE &p){ NODE *q,*s; if(!p->right) { q=p; p=p->left; free(q); } else if(!p->left) { q=p; p=p->right; free(q); } else { q=p; s=p->left; while(s->right) { q=s; s=s->right; } p->data=s->data; if(q!=p) q->right=s->left; else q->left=s->left; //p->left=s->left;相等 delete s; } return true;}bool DeleteTree(TREE &T,int x){ if(!T) return false; else { if(x==T->data) return Delete(T); else if(x data) return DeleteTree(T->left); else return DeleteTree(T->right); }}int main(){ //freopen("in.txt","r",stdin); int n,l; int a[MAX]; cin>>n;//节点个数 TREE base_tree=NULL; for(int i=0; i >a[i]; base_tree=build(base_tree,a[i]); } cout<<"二叉搜索树建立完成,结点个数为:"< < >n;//插入节点个数 for(int i=0;i >a[i]; if(insert(base_tree,a[i])) cout<<"节点"< <<"插入成功"< >n;//删除节点个数 for(int i=0;i >a[i]; if(insert(base_tree,a[i])) cout<<"节点"< <<"删除成功"<
每天进步一点点,十天进步十点点
更多模板和PTA题目到我的博客里参考
转载地址:http://vmqbi.baihongyu.com/