嗯,我已经完成了程序的最后一项功能,而且我已经完成了。我打了另一个我似乎无法自行解决的残障。
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表示答案。
任何建议或帮助将不胜感激!谢谢!
答案 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));
我终于明白了!
感谢您的帮助!