二叉搜索树模版

#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;
}

 

posted @ 2013-01-12 10:12  紫忆  阅读(218)  评论(0编辑  收藏  举报