Как выполнить поиск родительского узла данного узла в невариантном двоичном дереве?

#c #search #data-structures #binary-tree

#c #Поиск #структуры данных #двоичное дерево

Вопрос:

У меня есть код для поиска узла в двоичном дереве. Как я могу найти родительский узел узла, который KEY указан в качестве аргумента?

Вот код для обычного поиска двоичного дерева —

 struct Tree* search(struct Tree *root, int KEY)
{
    struct Tree *temp;
    if(root == NULL) return NULL; //Base condition
    else
    {
        if(root-> data == KEY) return root;
        else
        {
            temp = search(root-> Lchild, KEY);
            if(temp != NULL) return temp;
            else return(search(root-> Rchild, KEY));
        }
    }
    return NULL;
}
  

Комментарии:

1. geeksforgeeks.org/…

2. Нет. Этот код просто печатает родительский узел. Мне нужен код, который его возвращает

Ответ №1:

Вы возвращаете адрес Tree узла, значение которого совпадает с KEY , а не с родительским. Предполагая, что все значения узла различны в этом дереве, вы должны следовать приведенному ниже коду, чтобы вернуть Tree адрес родительского узла, если его дочернее значение узла (левого или правого дочернего узла) совпадает с KEY .

 struct Tree* search(struct Tree *root, int KEY){
    if(root == NULL){
        return NULL;
    }
    if(root->Lchild != NULL amp;amp; root->Lchild->data == KEY){
        return root;
    }
    if(root->Rchild != NULL amp;amp; root->Rchild->data == KEY){
        return root;
    }
    struct Tree *left = search(root->Lchild, KEY);
    struct Tree *right = search(root->Rchild, KEY);
    if(left != NULL){
        return left;
    }else if(right != NULL){
        return right;
    }
    return NULL;
}