c语言,递归函数,计算树的高度和节点的数目

dw251221 2012-02-25 12:06:37
我自己编写的程序,又找不到错的地方,运行一下的时候就是只能输入n和h的值,然后程序就崩了,计算不出要计算的高度和节点的数目,错在哪里了啊。。。麻烦各位了,先谢过哈

#include <stdio.h>

typedef struct noeud {
int value;
int height;
struct noeud * pere;
int nbfils ;
struct noeud ** fils;
int rang;
} t_noeud;

t_noeud *cree_racine(void){
t_noeud *racine;
racine-> value=0.;
racine-> height=0;
racine-> nbfils=0;
racine-> fils=NULL;
racine-> pere=NULL;
racine-> rang=0;
return racine;
}

t_noeud *cree_enfants(t_noeud *individu, int const n){
t_noeud * courant ;
int i;
individu->nbfils= n ;
individu->fils = malloc(n*sizeof(t_noeud*));
for (i = 0; i < n; i++)
{
courant = malloc(sizeof(t_noeud));
individu->fils[i] = courant;
courant->rang=i;
courant->height=individu->height+1;
courant->value=0;
courant->pere=individu;
courant->nbfils=0;
courant->fils=NULL;
}
return ;
}

int hauteur (t_noeud *racine) {
int h=0,hfils=0;
int i;
if (racine->nbfils=0)return 0;
else {for (i=0;i<racine->nbfils;i++){hfils=hauteur(racine->fils[i]);if(h<hfils)h=hfils;};}
return h+1;
}

int taille (t_noeud *racine) {
int s=0,sfils=0;
int i;
if (racine->nbfils=0)return 1;
else {for (i=0;i<racine->nbfils;i++){sfils=taille(racine->fils[i]);s+=sfils;};}
return s+1;
}

void arbre_n_aire(t_noeud *racine,int n,int h){
int i;
racine=cree_racine();
if (h>0){cree_enfants(racine,n);
arbre_n_aire(racine->fils[i],n,h);}
return;
}

int main(){
t_noeud *racine;
int n,h;
printf("please give the number of children you want n=");
scanf ("%d",&n);
printf("\nplease give the height you want h=");
scanf ("%d",&h);
arbre_n_aire(racine,n,h);
printf("the whole number of children is %d\n",taille (racine));
printf("the height of the tree is %d\n",hauteur (racine));
return 0;
}
...全文
163 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
delacrxoix_xu 2012-02-25
楼主还是慢慢调试吧,这样进步更快。一楼正解。楼主的野指针直接使用肯定是不对的。最起码要给他分配各内存吧,用malloc或者new,或者用entity直接声明
回复
s_hhm 2012-02-25
这种问题。。。。。。一楼是正解,设置断点,调试。找出错误。解决。
回复
乐哉悠哉 2012-02-25

t_noeud *cree_racine(void){
t_noeud *racine;
racine-> value=0.;
racine-> height=0;
racine-> nbfils=0;
racine-> fils=NULL;
racine-> pere=NULL;
racine-> rang=0;
return racine;
}

虽然我的杀毒软件很烂,但是也不至于为了运行个程序就禁用它……同学,你不会用指针能不能多看看书再用呢?内存被你折磨致死了!!!
就这个子函数来说,这算神马啊……申请个指针,t_noeud *racine;然后就开始给(野)指针所指的空间赋值了?它一不小心指到你的杀毒软件内存区可怎么办。。。
回复
quwei197874 2012-02-25
设个断点调试,看在哪崩溃了
回复
发动态
发帖子
C语言
创建于2007-09-28

6.3w+

社区成员

C语言相关问题讨论
申请成为版主
社区公告
暂无公告