Для класса мне нужно создать двоичное дерево объектов состояния, каждое из которых содержит двоичное дерево резидентных объектов, организующих людей, которые живут в каждом штате. Я пытаюсь выполнить поиск в определенном состоянии для своего самого старого жителя; однако жители организованы по дереву по алфавиту, что абсолютно ничего не значит для моего поиска. Таким образом, я должен пересечь все дерево жителей, обновляя узел, который сохраняет самого старого человека, и верните его, как только дерево будет полностью пройдено. У меня есть первая часть моего кода, но я зациклился на том, как писать остальную часть рекурсии.Unordered Binary Tree Traversal
метод Государственного дерева:
node <Person*> * findoldest (int obd, node <Person*> * oldest, node <Person*> * n)
{
//FINAL WORKING CODE
if (root == NULL)
return NULL;
if (n == NULL)
return NULL;
else
{
if (n->data->birthday < obd)
{
obd = n->data->birthday;
oldest = n;
}
node <Person*> * o_left = findoldest(obd, oldest, n->left);
node <Person*> * o_right = findoldest(obd, oldest, n->right);
node <Person*> * res;
if (o_right && o_left)
if (o_right->data->birthday < o_left->data->birthday)
res = o_right;
else
res = o_left;
else
res = (o_right != NULL ? o_right : o_left);
if (res && oldest)
if (res->data->birthday < oldest->data->birthday)
return res;
else
return oldest;
else
return ((res != NULL ? res : oldest));
}
}
И тогда общественность "обертка" метод состояние дерева:
node <Person*> * findoldest()
{ int oldest_bday = root->data->birthday;
node <Person*> * oldest_person = root;
findoldest(oldest_bday, oldest_person, root);
}
Кроме того, это почти ожидаемо, что вы segfault. Вы никогда не проверяете свои указатели, прежде чем разыгрывать их. Всегда проверяйте, нет ли o_left не в NULL, прежде чем делать: 'o_left-> data' – Khaldor
Ждать, так что это закончилось тем, что работало нормально? – Khaldor
Nope. Все-таки срыв. Это кажется очень сложным, с очень большим количеством if/elses. Ничего себе, я не смущен. – jiccan