Итак, у меня есть проблема, и у меня есть Алгоритм для нее, но я просто не могу превратить ее в код на языке C.
Проблема: Учитывая дерево AVL, вернуть следующееминимальное натуральное значение, которого нет в дереве.
Пример: если 2 является минимумом в дереве, я должен выяснить, является ли 3 одним из узлов в дереве, если это не так, я должен вернуть значение 3, если оно есть,Я должен видеть, если 4 в дереве, и так далее ...
Алгоритм к проблеме, которая работает в O (logn) (когда n - Количество узлов, найденных в дереве):
сначала, мы проверяем, если узел-> размер = узел-> ключ - TreeMinimum, если да, перейти к правой стороне дерева.если нет, то идите налево.когда мы достигаем NULL, мы должны вернуть значение последнего узла, который мы посетили плюс 1. РАЗМЕР узла - это количество узлов, которые находятся под этим узлом, включая сам узел.Я написал этот код на c, но он, похоже, не работает:
int next_missing( AVLNodePtr tnode )
{
int x,y;
if(tnode==NULL)
{
return (tnode->key)+1;
}
if(tnode->size == tnode->key - FindMin(tnode))
x = next_missing(tnode->child[1]);
if(tnode->size != tnode->key - FindMin(tnode))
y = next_missing(tnode->child[0]);
if(x>y) return y;
else return x;
}
Буду признателен за любую помощь / советы по исправлению кода.Спасибо.