Получить наименьшие три числа из двоичного дерева в c

Я использую функцию inorder для печати данных в двоичном дереве поиска от наименьшего к наибольшему элементу. как я могу напечатать только первые три наименьших элемента?

void inorder(struct node *root)
{
    // Depth-first
    // Inorder (LDR) --> <left> <data> <right>

    if(root == NULL)
        return;

    indorder(root -> left_child);

    printf("%d ", root -> value);

    inorder(root -> right_child);
}

Я хочу добавить новый аргумент для первого элемента n

void inorder(struct node *root, int n)

person obei    schedule 13.12.2020    source источник


Ответы (1)


Сделайте так, чтобы ваша функция возвращала новое значение n, чтобы после рекурсивного вызова вы могли видеть, является ли n все еще положительным, и должно быть напечатано текущее значение узла. Если нет, то можно выйти из дерева рекурсии, так как делать больше нечего:

int inorder(node *root, int n) {
    if (root == NULL || n <= 0) // Nothing to print here.
        return n;
    n = inorder(root -> left_child, n);
    if (n <= 0) // All required prints have been done, so exit recursion tree
        return 0;
    printf("%d ", root -> value);
    // Previous print counts as 1, so pass one less to next call:
    return inorder(root -> right_child, n-1);
}
person trincot    schedule 13.12.2020