打印 BST 中的 n 个最大值

Print n largest values from BST

我正在尝试从 BST 打印 n 最大值,我的指针肯定有问题,这是我的代码部分。

    void bt_printN(node *leaf,int *n)
{
    if((leaf != NULL) && *n > 0)
    {
        bt_printN(leaf->right,n);
        printf("%s %d\n",leaf->word, leaf->i);
        *n--;
        bt_printN(leaf->left,n);
    }
}

这不起作用,将 n 值传递给此类递归函数的正确方法是什么?

主要问题不是你的超车方式n;主要问题是 *n-- 递减指针,而不是指向的值。您需要 (*n)-- 来减少指向的值。

修复了这个问题后,您的代码就完成了大部分工作——尽管我对 'smallest first' 的评论是转移话题。但是,我认为您需要在递归调用 bt_printN(leaf->right, n); 之后和函数打印自己的节点之前检查 n 。您不必在第二次递归调用之前进行检查,尽管这样做可能是次要(最小)优化。如所写,如果 *n == 1 在入口处,它向右递归,但随后 RHS 向下的每个节点打印其值,即使只需要一个。