二叉搜索树模版
#include<iostream> using namespace std; typedef struct tree { tree *l,*r; int num; }tree; tree *creat(int x) //建树 { tree *t=(tree *)malloc(sizeof(tree)); t->l=0; t->r=0; t->num=x; return t; } tree *inster(tree *s,int x) //插入结点 { if(s==NULL) { tree *t=creat(x); s=t; } else { if(x<=s->num) s->l=inster(s->l,x); else s->r=inster(s->r,x); } return s; } tree *findmin(tree *s) //找tree的最小值(左子树最左边的为最小值) { if(s==NULL) return NULL; else if(s->l==NULL) return s; else return findmin(s->l); } tree *del(tree *s,int x) //在删除一个结点后,要有一个结点可以承接此结点位置的,要么取被删除结点右子树中最小的那个结点, { //要么取其左子树中最大的那个结点 tree *t; if(s==NULL) return NULL; else if(x<s->num) s->l=del(s->l,x); else if(x>s->num) s->r=del(s->r,x); else if(s->l&&s->r) //如果两个孩子都存在 { t=findmin(s->r); //找右子树中最小的那个结点 s->num=t->num; s->r=del(s->r,s->num); return s; } else //只有一个孩子在,那么直接操作就好 { t=s; if(s->l==NULL) s=s->r; else if(s->r==NULL) s=s->l; free(t); } return s; }
朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。