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

时间:2010-10-07 03:28:17

标签: 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) + 
        InternalPathLength(r->right, value+1);
 }

我觉得我接近解决方案,但我知道我错过了一些东西。我认为这是另一个if语句,我尝试了不同的组合,但我最终得到了一个崩溃的程序,或者0表示答案。

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

3 个答案:

答案 0 :(得分:3)

可能是这样的:

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 );
 }

或只是为NODE添加NULL检查

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);
 }

答案 1 :(得分:0)

也许你可以传递价值计数器作为参考?然后每次调用函数时递增它? idk ..我正在制作明天到期的节目,需要同样的功能......

答案 2 :(得分:0)

if(r == NULL) 
{
    return 0;
}
return (value+InternalPathLength(r->right,value+1)+InternalPathLength(r->left,value+1));

我终于明白了!

感谢您的帮助!