Тема: Видалення елементу з бінарного дерева.

Пробував видалити елемент, але щось нічого не виходить. Допоможіть будь ласка. Компілятор помилку не вибиває.

void deleteleaf(leaf** root) {
    cout << "Введіть індекс елемента, якого Ви хочете видалити: ";
    int num;
    cin >> num;
    leaf* clean = (*root);
    leaf* saveroot = (*root);
    leaf* rootleft = ((*root)->left);
    leaf* rootright = ((*root)->right);
    if (clean->index == num) {
        if (clean->right != nullptr) {
            clean = clean->right;
            while (clean->left != nullptr) {
                clean = clean->left;
            }
        
            
            leaf* newright = clean->right;
            
            (*root) = clean;
            (*root)->left = rootleft;
            (*root)->right = rootright;
            delete clean;
            leaf* find = rootright;
            while (find->left) {
                find = find->left;
            }
            find->left = newright;
            return;
        }
        else {
            if (clean->index < num && clean->index>num) {
                while (clean->left != nullptr && clean->right != nullptr) {
                    if (clean->index < num && clean->right != nullptr) {
                        clean = clean->right;
                        if (clean->index == num) {
                            break;
                        }
                    }
                    else {
                        if (clean->index > num && clean->left != nullptr) {
                            clean = clean->left;
                            if (clean->index == num) {
                                break;
                            }
                        }
                    }
                }if (clean->index != num) {
                    cout << "Індексу " << num << " не знайдено у правій частині дерева.";
                    return;
                }
                else {
                    if (clean->index == num) {
                        leaf* deleteit = clean;
                        leaf* save = clean;
                        leaf* cleanright;
                        leaf* cleanleft = clean->left;
                        if (clean->right != nullptr) {
                            cleanright = clean->right;
                        }
                        else {
                            cleanright = nullptr;
                        }
                        if (clean->left != nullptr) {
                            clean = clean->left;
                            if (clean->right == nullptr) {
                                deleteit = clean;
                                deleteit->right = cleanright;
                                delete save;
                                return;
                            }
                            else {
                                while (clean->right != nullptr) {
                                    clean = clean->right;
                                }
                                deleteit = clean;
                                deleteit->right = cleanright;
                                deleteit->left = cleanleft;
                                delete clean;
                                return;
                            }
                        }
                    }
                }
            }
        }
    }
}

2

Re: Видалення елементу з бінарного дерева.

Додайте тег code (кнопка <>). І поясніть, як саме ви хочете видаляти елемент, словами - видалення є дещо нетривіальною операцією, після неї треба якось два дерева об'єднати.

3

Re: Видалення елементу з бінарного дерева.

koala написав:

Додайте тег code (кнопка <>). І поясніть, як саме ви хочете видаляти елемент, словами - видалення є дещо нетривіальною операцією, після неї треба якось два дерева об'єднати.

а в мене кнопка зветься code

Re: Видалення елементу з бінарного дерева.

Я зберігав адреси у вказівниках, видаляв об'єкти, на їх місце ставив адрес знайденого елементу( який підходить по умовам) але не працює. Я собі намалював на листочку А4 і робив на логіку програму. Не розумію що пішло не так... Можливо Ви порадите якийсь підручник. А то клятий політеху на карантині всім байдуже, автоматом ставлять бали і гуляй... А методичних вказівках 0 інформації.

5

Re: Видалення елементу з бінарного дерева.

Тоді викладайте скан (чи фото) того вашого A4.
Взагалі навіщо вам це дерево? Яку воно задачу виконує?

Re: Видалення елементу з бінарного дерева.

Ну я вчусь. В мене курс "програмування ч.3 Структури даних та алгоритми" там остання тема це бінарне дерево. Як я писав раніше: методика пуста, відкрив вікіпедію і там було написано про видалення елементу з дерева, відображення дерева, сортування і ТД. Але як це робити ні слова. Ну і ось пробую якось це реалізувати)
А якщо в загальному "нащо це" я в душі не їбу.

7

Re: Видалення елементу з бінарного дерева.

Прихований текст
Львовский сырник в мульти написав:

Ну я вчусь. В мене курс "програмування ч.3 Структури даних та алгоритми" там остання тема це бінарне дерево. Як я писав раніше: методика пуста, відкрив вікіпедію і там було написано про видалення елементу з дерева, відображення дерева, сортування і ТД. Але як це робити ні слова. Ну і ось пробую якось це реалізувати)
А якщо в загальному "нащо це" я в душі не їбу.

це чудово

8

Re: Видалення елементу з бінарного дерева.

http://cslibrary.stanford.edu/110/BinaryTrees.html

9

Re: Видалення елементу з бінарного дерева.

https://www.geeksforgeeks.org/binary-se … -2-delete/