C++ 确定树的内部路径长度(C+;+;)

C++ 确定树的内部路径长度(C+;+;),c++,tree,C++,Tree,好了,我已经完成了程序的最后一个功能。我又碰到了一个似乎无法自己解决的难题 int Tree::InternalPathLength(Node * r, int value) { if(r->left == NULL && r->right == NULL) { return 0; } return value + InternalPathLength(r->left, value+1) + In

好了,我已经完成了程序的最后一个功能。我又碰到了一个似乎无法自己解决的难题

int Tree::InternalPathLength(Node * r, int value)
{
    if(r->left == NULL && r->right == NULL)
    {
        return 0;
    }
    return value + InternalPathLength(r->left, value+1) + 
        InternalPathLength(r->right, value+1);
 }
我觉得我已经接近解决方案了,但我知道我错过了一些东西。我认为这是另一个if语句,我尝试了不同的组合,但最终得到了一个崩溃的程序或0的答案

任何建议或帮助都将不胜感激!谢谢

可能是这样的:

int Tree::InternalPathLength(Node * r, int value)
{
    if(r->left == NULL && r->right == NULL)
    {
        return 0;
    }
    return value + ( r->left? InternalPathLength(r->left, value+1):0 )
                 + ( r->right? InternalPathLength(r->right, value+1):0 );
 }
或者只为节点添加空检查

int Tree::InternalPathLength(Node * r, int value)
{
    if (r == NULL ) return 0;
    if(r->left == NULL && r->right == NULL)
    {
        return value +1;
    }
    return value + InternalPathLength(r->left, value+1) + 
        InternalPathLength(r->right, value+1);
 }

也许你可以把值计数器作为参考传入?然后每次调用函数时递增它?idk。。我正在做一个明天到期的程序,它也需要同样的功能

if(r == NULL) 
{
    return 0;
}
return (value+InternalPathLength(r->right,value+1)+InternalPathLength(r->left,value+1));
我终于明白了


谢谢你的帮助

如果只有r->left或r->right为null,则会产生和null REF错误,添加条件检查并分别为left或right调用recursive。应该是
value+max(r->left?InternalPathLength(r->left):0,r->right?InternalPathLength(r->right):0)
?是的,我没有注意到内部路径长度,然后必须修改。我刚刚尝试了您最近更新的建议,我的程序不再崩溃,但它只返回0作为内部路径长度。修复了您的
r=NULL
问题。@Blindy:谢谢@莫奈特:再检查一下最后一次。看来我们应该在明天之前停止发布实际答案。太好了!当left和right都=NULL(leef)时,不应返回0,而应返回值+1。