打印 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 向下的每个节点打印其值,即使只需要一个。
我正在尝试从 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 向下的每个节点打印其值,即使只需要一个。