世界格斗大赛第27期:+20 c语言- (求)树,二叉树,二叉查找树区别和用他们做的C语言简单编成

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/24 00:57:54
+20
c语言-
(求)
树,二叉树,二叉查找树区别

和用他们做的C语言简单编成

最好有详细解释。

谢谢

二叉树是指结点的度最大为2,也就是一个结点最多只有两个分支。二叉树与度为2的树的区别是二叉树是顺序树,即有严格的左右之分,而度为2的树却没有这种要求。
二叉排序树是在二叉树的基础上面将小于结点的分支都放在该结点的左边,而大于该结点的分支都放在右边的树,这样很便于查找。
我只给你写了一些主要的函数:

struct point {
int data;
struct point *lchild;
struct point *rchild;
};
/*建立二叉排序树*/
struct point *creattree(int data[],int n)
{

int i;
struct point *T;

T=NULL;

for(i=0;i<n;i++)
T=insert(T,data[i]);
return T;
}
/*插入一个结点*/
struct point *insert(struct point *T,int item)
{
struct point *p1,*p2;
p1=(struct point *)malloc(sizeof(struct point ));
p1->data=item;
p1->lchild=NULL;
p1->rchild=NULL;
if(T==NULL)
T=p1;
else if(T!=NULL){
p2=T;
while(1)
{
if(item<p2->data)
{
if(p2->lchild!=NULL)
p2=p2->lchild;
else{
p2->lchild=p1;
break;
}
}
else
{
if(p2->rchild!=NULL)
p2=p2->rchild;
else{
p2->rchild=p1;
break;
}
}
}
}
return T;
}
/*对二叉树进行中序遍历,如果一个结点左孩子的值大于它,或者是右孩子的值小于它,则不为顺序树*/
int INorder(struct point *T,int n)
{
struct point *stack[30];
int top=-1,i=0;
struct point *p;
p=T;
do{
while(p!=NULL)
{
stack[++top]=p;
p=p->lchild;
}
p=stack[top--];
if(((p->lchild)->data)>p->data||(p->rchild)->data)<p->data)
return 0;
p=p->rchild;
}while(p!=NULL||top!=-1);
p=p->rchild;
printf("%d",p->data);
}

看看数据结构树吧。
比较基本的概念。树,叉就可以多了。
2叉,就是2个了。
查找2叉,忘记了点,好象和索引B+什么有关?呵呵,忘记拉。