我正在尝试用C学习树。我需要找到最长的路径。我正在使用递归方法。但我得到分段错误。我无法找到它为什么会发生。我不需要逻辑。我想自己做。只是想知道我在做什么基本的错误。
欢迎任何处理指针的建议。
void longestPath(struct node *p,int *maxlen,int count)
{
if(p==NULL)
return;
count++;
if(p->lft==NULL && p->rt==NULL )
{
if(*maxlen<count)
*maxlen=count;
}
longestPath(p->lft,maxlen,count);
longestPath(p->rt,maxlen,count);
}
答案 0 :(得分:2)
也检查maxlen是否为NULL。这可能是你在没有验证它的情况下取消指针的问题。
int maxpath = 0;
int count = 10; // for example
struct node* nodes; // initialized somewhere else
longestPath( nodes, &maxpath, count );
答案 1 :(得分:1)
您可以使用返回值:
,而不是通过指针传递结果unsigned longestPath(struct node *p)
{
unsigned ll,rr;
if (!p) return 0;
ll = longestPath(p->lft);
rr = longestPath(p->rt);
return ll > rr ? 1+ll : 1+rr;
}