Я пытаюсь рассчитать сложность удаления узла двоичного дерева. Я хочу рассчитать сложность во всех трех случаях (худшая, средняя сложность и наилучшая) более подробно. Как выбрать математическую формулу ? T (n) =?Двоичный поиск дерева удалить сложность узла
Nod* delete(Nod*& rad, const int& c)
{
//Nod has:c(information:int),nextSt(left:pointer to Nod),nextDr(right pointer to Nod)
Nod* aux;
if (rad == NULL)
return NULL;
else
if (c< rad->c && c != rad->c) {
rad->nextSt() = delete(rad->nextSt(), c);
return rad;
}
else
if (c > rad->c) {
rad->nextDr() = delete(rad->nextDr(), c);
return rad;
}
else
if (rad->nextSt() != NULL && rad->nextDr() != NULL) {
aux = minim(rad->nextDr());
rad->setElem(aux->element());
rad->nextDr() = delete(rad->nextDr(), rad->c);
return rad;
}
else {
aux = rad;
Nod* repl;
if (rad->nextSt() == NULL)
repl = rad->nextDr();
else
repl = rad->nextSt();
delete rad;
return repl;
}
}
Это зависит от того, ваш узел является сбалансированным. Удаление узла - это O (глубина) в бинарных деревьях. O (глубина) = O (n) для несбалансированных деревьев (n - количество узлов), тогда как для сбалансированных деревьев это просто O (log (n)). Другими словами, покажите нам ваш алгоритм вставки :). – lorro