Нахождение минимального узла и затем возвращение следующего минимального естественного значения, которого нет в BST - PullRequest
0 голосов
/ 27 апреля 2019

Итак, у меня есть проблема, и у меня есть Алгоритм для нее, но я просто не могу превратить ее в код на языке 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;
}

Буду признателен за любую помощь / советы по исправлению кода.Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...