我正在尝试从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
值传递给这种递归函数的正确方法是什么?
答案 0 :(得分:1)
主要问题不在于您通过n
的方式;主要问题是*n--
递减指针,而不是指向的值。您需要(*n)--
来减少指向的值。
经过修复后,您的代码大部分都在那里 - 尽管我的红鲱鱼评论是关于最小的第一个'。但是,我认为您需要在递归调用n
之后和函数打印自己的节点之前检查bt_printN(leaf->right, n);
。您不必在第二次递归调用之前检查,尽管这可能是次要(最小)优化。如上所述,如果输入时为*n == 1
,它会向右递归,但随后RHS路上的每个节点都会打印其值,即使只需要一个节点。