#1
by MEA » 5年前
insert関数で挿入した数が木のどの深さにあるかを返すプログラムを書きたいのですが、返ってくる値が全て0になってしまいます。以下のコードのどこを改善したら良いでしょうか?
コード:
#include<stdio.h>
#include<stdlib.h>
struct vertex {
int data;
struct vertex *l, *r;
};
struct vertex *newv()
{
return((struct vertex *)malloc(sizeof(struct vertex)));
}
struct vertex *create()
{
struct vertex *p;
p=newv();
p->data=0;
p->r=NULL;
p->l=NULL;
return(p);
}
int insert(struct vertex *p,int x,int lev)
{
struct vertex *pt;
lev=0;
if (p->data>x && p->l!=NULL)
return(insert(p->l,x,lev=lev+1));
if (p->data<x && p->r!=NULL)
return(insert(p->r,x,lev=lev+1));
pt=newv();
pt->data=x;
pt->l=pt->r=NULL;
if(p->data>x)
p->l=pt;
else
p->r=pt;
return lev;
}
int main(){
int x;
struct vertex *r;
r=create();
r->data=18;
printf("insert at level %d\n" ,insert(r,7,0));
printf("insert at level %d\n" ,insert(r,5,0));
printf("insert at level %d\n" ,insert(r,11,0));
printf("insert at level %d\n" ,insert(r,8,0));
printf("insert at level %d\n" ,insert(r,15,0));
printf("insert at level %d\n" ,insert(r,22,0));
printf("insert at level %d\n" ,insert(r,21,0));
printf("insert at level %d\n" ,insert(r,31,0));
printf("insert at level %d\n" ,insert(r,25,0));
return 0;
}
insert関数で挿入した数が木のどの深さにあるかを返すプログラムを書きたいのですが、返ってくる値が全て0になってしまいます。以下のコードのどこを改善したら良いでしょうか?
[code]
#include<stdio.h>
#include<stdlib.h>
struct vertex {
int data;
struct vertex *l, *r;
};
struct vertex *newv()
{
return((struct vertex *)malloc(sizeof(struct vertex)));
}
struct vertex *create()
{
struct vertex *p;
p=newv();
p->data=0;
p->r=NULL;
p->l=NULL;
return(p);
}
int insert(struct vertex *p,int x,int lev)
{
struct vertex *pt;
lev=0;
if (p->data>x && p->l!=NULL)
return(insert(p->l,x,lev=lev+1));
if (p->data<x && p->r!=NULL)
return(insert(p->r,x,lev=lev+1));
pt=newv();
pt->data=x;
pt->l=pt->r=NULL;
if(p->data>x)
p->l=pt;
else
p->r=pt;
return lev;
}
int main(){
int x;
struct vertex *r;
r=create();
r->data=18;
printf("insert at level %d\n" ,insert(r,7,0));
printf("insert at level %d\n" ,insert(r,5,0));
printf("insert at level %d\n" ,insert(r,11,0));
printf("insert at level %d\n" ,insert(r,8,0));
printf("insert at level %d\n" ,insert(r,15,0));
printf("insert at level %d\n" ,insert(r,22,0));
printf("insert at level %d\n" ,insert(r,21,0));
printf("insert at level %d\n" ,insert(r,31,0));
printf("insert at level %d\n" ,insert(r,25,0));
return 0;
}
[/code]