В файле записаны числа, нужно их считать, построить дерево поиска. После этого сбалансировать дерево, выполнив RR поворот. Проблема возникла с тем, как определить именно несбалансированный узел (есть гарантия, что такой узел только один). Написал функцию, которая определяет высоту заданного ей узла. А как найти именно несбалансированный узел? Ниже функция, которая возвращает высоту узла.
int HeightNode(PNode Tree)
{
int l,r,height = 0;
if(Tree != 0)
{
l = HeightNode(Tree -> Left);
r = HeightNode(Tree -> Right);
height = ((l > r) ? l : r) + 1;
}
return height;
}
Решение получилось таким. Вроде работает.
void FindDebalancedNode(PNode & tree)
{
if (!tree)
return;
FindDebalancedNode(tree->Left);
FindDebalancedNode(tree->Right);
int leftSubtree = HeightOfSubtree(tree -> Left);
int rightSubtree = HeightOfSubtree(tree -> Right);
if (leftSubtree + 1 < rightSubtree)
{
DoRRTurn(tree);
}
}
int HeightOfSubtree(PNode tree)
{
int l,r,height = 0;
if(tree != 0)
{
l = HeightOfSubtree(tree -> Left);
r = HeightOfSubtree(tree -> Right);
height = ((l > r) ? l : r) + 1;
}
return height;
}
void DoRRTurn(PNode & p)
{
PNode q = p-> Right;
p->Right = q -> Left;
q->Left = p;
p = q;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Две таблицы, связь один ко многимКак выбрать присутствующих сотрудников, за день
Есть таблица, T1, в ней нужно установить значение поля V2 в 'A3', но только в том случае, если это поле было равно 'A2'Сделать это нужно для всех записей,...
Сижу 2 часа, не могу разобраться как получить данные из двух таблиц