从c中的二叉树中获取最小的三个数

Get smallest three numbers from binary tree in 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)

让你的函数 return 成为 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);
}