从BST打印n个最大值

时间:2015-01-16 02:24:04

标签: c algorithm pointers binary-search-tree

我正在尝试从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值传递给这种递归函数的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

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

经过修复后,您的代码大部分都在那里 - 尽管我的红鲱鱼评论是关于最小的第一个'。但是,我认为您需要在递归调用n之后和函数打印自己的节点之前检查bt_printN(leaf->right, n);。您不必在第二次递归调用之前检查,尽管这可能是次要(最小)优化。如上所述,如果输入时为*n == 1,它会向右递归,但随后RHS路上的每个节点都会打印其值,即使只需要一个节点。

相关问题