Найти конкретную c высоту узла в дереве с ++ - PullRequest
1 голос
/ 12 апреля 2020

Я пытаюсь пройти по дереву и проверить для определения c (rel_name) и вернуть его высоту, но моя функция перемещается по "материнской" ветви и проверяет только ветвь отца. В результате моя программа возвращает исключение () и дамп памяти. Как мне исправить мою функцию, чтобы не дамп памяти, а также проверить ветвь матери?

string treeHeight(Person* root, string rel_name, int height){
   height++;
   if(root == nullptr) {  
       throw exception();
    }    
    else if(root->name == rel_name) return to_string(height);
    return treeHeight(root->father, rel_name, height);
    return treeHeight(root->mother, rel_name, height);
}

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020

Кто-то уже указал, но если ваш код достигает листа и идет немного дальше, в соответствии с вашим базовым сценарием он выдаст исключение и выйдет из программы.

Я немного пересмотрел ваш код бит:

int treeHeight(Person* root, const string& rel_name){
    if(root == nullptr) {  
        return -1;
    }    
    else if(root->name == rel_name) return 0;

    int leftHeight = treeHeight(root->father, rel_name);
    int rightHeight = treeHeight(root->mother, rel_name);

    if (leftHeight == -1 && rightHeight == -1) {
        return -1;
    } else {
        return (leftHeight > rightHeight ? leftHeight : rightHeight) + 1;
    }
}

Надеюсь, это поможет.

0 голосов
/ 12 апреля 2020

В вашем коде вы не разрешаете коду go к родительскому узлу, непосредственно от вызова родительского узла, и, следовательно, его выполнение не выполняется вперед.

Попробуйте это ниже:

string treeHeight(Person* root, string rel_name, int height){
   height++;
   if(root == nullptr) {  
       throw exception();
    }    
    else if(root->name == rel_name) return to_string(height);
    int person_height = treeHeight(root->father, rel_name, height);
    if(person_height!=0) return height;           ---------> You need to apply this check
    return treeHeight(root->mother, rel_name, height);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...