In member function rangeSumBST error: control reaches end of non-void function [-Werror=return-type]

在leetcode上编译算法题好几次出现下面这个错误
In member function rangeSumBST Char 20: error: control reaches end of non-void function [-Werror=return-type]
在vs上能编译通过,在leetcode上就是通不过,将警告视为错误。
代码内容是一个递归算法,我觉得递归应该是能够找到出口退出的,非void函数部分有return的,但编译就是将错误定位在最后一行,提示没有return。

原来的代码:

int rangeSumBST(treeNode* rootNode, int L, int R) {
 if (rootNode)
 {
  if (flag != 1)
  {
   rangeSumBST(rootNode->Lchild, L, R);
   if (R == rootNode->data)
   {
    sum += R;
    flag = 1;
   }
   if (flag == -1)
   {
    sum += rootNode->data;
   }
   if (L == rootNode->data)
   {
    sum += L;
    flag = -1;
   }
   if (flag == 1)
   {
    return sum;       //看这儿!!!!!!!
   }
   rangeSumBST(rootNode->Rchild, L, R);
     }
 }
 else
    return 0;       //想办法修改最后那几行代码,有return,还不影响答案
}

在vs中也有类似的警告(xxx不是所有的控件路径都有返回值):
在这里插入图片描述
修改后的代码
可以查看自己的代码,最终需要返回什么,再在末尾重复一遍return result(不管是否能够执行到这一步骤,加上应该都不影响吧,根据具体情况来),

int sum = 0;
int flag = 0;
int rangeSumBST(treeNode* rootNode, int L, int R) {
 if (rootNode)
 {
  if (flag != 1)
  {
   rangeSumBST(rootNode->Lchild, L, R);
   if (R == rootNode->data)
   {
    sum += R;
    flag = 1;
   }
   if (flag == -1)
   {
    sum += rootNode->data;
   }
   if (L == rootNode->data)
   {
    sum += L;
    flag = -1;
   }
   if (flag == 1)
   {
    return sum;
   }
   rangeSumBST(rootNode->Rchild, L, R);
     }
 }
 return sum;      //修改此处,因为怎么样都需要返回一个sum,索性在末尾再重复一次return sum,解决了问题,也不影响真正的返回值。
}

代码修改后,会发现在vs中上面的那个警告也消失了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值