设计递归算法,求以“孩子-兄弟链表”表示的度

最近学习数据结构,用的书籍是陈文博的《数据结构及应用算法教程》,对其194页的关于树的算法甚是不解。为了理解,折腾了大于一天半,但是还是不行。

书本算法如下:

int degreeOfTree(CSTree T)
{
 CSTree p;
 int degree;
 int d;
 if(!T->firstchild)
return 0;
else 
{
 for(degree=0;p=T->firstchild;p;p=p->nextsibling)
  degree++;
for(p=T->firstchild;p;p=p->nextsibling)
{
d=degreeOfTree(p);
if(d>degree)
degree=d;
}
return degree;
}
}

我发现,如果一个结点的firstchild==NULL时,其返回为0.如果设C为一个子根节点,该根节点有4个孩子。分别为F G H I,则程序循序执行。之前计算的C节点的度4,被之后的其孩子中的最后一个度数不为0的给覆盖了。即degree的值,会被覆盖。

问题终于解决了,程序本身没有错误,是我定义变量的位置不对,不应该把degree和d定义为全局变量。而是定义为函数内的局部变量。这样每次调用都会把数据压入到堆栈里面。而全局变量则会在执行的过程中被修改。原来在递归调用中,变量一般应设置为函数局部变量呀。

    原文作者:递归算法
    原文地址: https://blog.csdn.net/raby_gyl/article/details/9734655
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞