Определить длину внутреннего пути дерева (C ++) - PullRequest
2 голосов
/ 07 октября 2010

Ну, я дошел до последней функции моей программы, и я закончил.Я наткнулся на еще один пень, который, кажется, не могу исправить самостоятельно.

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 ]

3 голосов
/ 07 октября 2010

Может быть, это работает:

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

или просто добавьте NULL-проверку для NODE

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);
 }
0 голосов
/ 07 октября 2010
if(r == NULL) 
{
    return 0;
}
return (value+InternalPathLength(r->right,value+1)+InternalPathLength(r->left,value+1));

Я наконец получил это!

Спасибо за вашу помощь, хотя!

0 голосов
/ 07 октября 2010

может быть, вы можете передать значение счетчика в качестве ссылки?затем увеличивать его каждый раз, когда вызывается функция?idk .. Я работаю над программой, которая должна быть завтра, и которая нуждается в этой же функции ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...