Назад к вопросам
Middle
87
questionbank

Какова временная сложность операций вставки, поиска и удаления в бинарном дереве в среднем и худшем случае?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Временная сложность операций вставки, поиска и удаления в бинарном дереве

Сложность указанных операций зависит от высоты дерева.

В среднем случае

В хорошо сбалансированном бинарном дереве высота примерно равна $log_2(n)$, где $n$ - количество узлов.

Таблица временной сложности в среднем случае:

Операция Временная сложность
Вставка $O(log_2(n))$
Поиск $O(log_2(n))$
Удаление $O(log_2(n))$

В худшем случае

В вырожденном случае, когда дерево представляет собой связный список (например, все элементы отсортированы при вставке), высота дерева равна $n$.

Таблица временной сложности в худшем случае:

Операция Временная сложность
Вставка $O(n)$
Поиск $O(n)$
Удаление $O(n)$

Пример вырожденного дерева (дерево из одного "ребра" на каждом уровне):

// Пример вырожденного бинарного дерева
// Каждый узел имеет только одного потомка

struct Node {
    int key;
    Node* left;
    Node* right;

    Node(int k) : key(k), left(nullptr), right(nullptr) {}
};

// Вставка элементов в порядке возрастания приведет к вырожденному дереву
void insert(Node*& root, int key) {
    if (!root) {
        root = new Node(key);
        return;
    }
    if (key < root->key) {
        insert(root->left, key);
    } else {
        insert(root->right, key);
    }
}

int main() {
    Node* root = nullptr;
    insert(root, 1);
    insert(root, 2);
    insert(root, 3);
    // ... и так далее
    // Это создаст вырожденное дерево
    return 0;
}