@coldhand
Student

Как найти родителя заданного элемента в бинарном дереве?

Приветствую! Сейчас знакомлюсь с бинарными деревьями и необходимо найти родителя введённого элемента. Написал следующую рекурсивную функцию, но работать она не хочет. Подскажите, что я делаю не так?
struct node* searchParent(struct node* root, int x)
{
    if(root->left_child->data == x || root->right_child->data == x)
    {
        return root;
    }
    else
    {
        return searchParent(root->left_child, x);
        return searchParent(root->left_child, x);
    }
}


Сама структура:
struct node
{
    int data; //node will store an integer
    struct node *right_child; // right child
    struct node *left_child; // left child
};
  • Вопрос задан
  • 115 просмотров
Решения вопроса 1
@coldhand Автор вопроса
Student
Оставлю решение для потенциальных следующих искателей:
struct node* searchParent(struct node* root, int x)
{
    if((root->left_child != NULL && root->left_child->data == x) || (root->right_child != NULL && root->right_child->data == x))
    {
        return root;
    }
    else
    {
        if(root->left_child != NULL && x < root->data)
        {
            return searchParent(root->left_child, x);
        }
        else
            if(root->right_child != NULL && x > root->data)
            {
                return searchParent(root->right_child, x);
            }
    
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
Потому что в блоке else оба вызова идут с left_child.
А так же после первого вызова сразу будет возврат, т.к. вызовы находятся в операторе return.
И вам нужно сначала проверить, что указатели на потомков не nullptr.
На самом деле вам нужно ещё одно условие в блоке else:
If(root->data < x) return searchParent(root->left_child, x);
Else return searchParent(root->right_child, x);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы