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

最近学习数据结构,用的书籍是陈文博的《数据结构及应用算法教程》,对其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://www.cnblogs.com/raby/p/5886716.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值