C 从BST打印n个最大值
我正试图打印BST中的C 从BST打印n个最大值,c,algorithm,pointers,binary-search-tree,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(le
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)--
来减小所指向的值
有了这一点,你的代码大部分都在那里了——尽管我对“最小的优先”有一些恼人的评论。但是,我认为在递归调用
bt_printN(leaf->right,n)之后需要检查n
在函数打印自己的节点之前。您不必在第二次递归调用之前进行检查,尽管这样做可能是一个次要的(最小的)优化。如前所述,如果输入时*n==1
,它会向右递归,但在RHS下的每个节点都会打印其值,即使只需要一个值。传递正常;不是的是递减<代码>*n--
递减指针,而不是指向的值;您需要(*n)--
来减小该值。其他一切是否正常是一个单独的讨论;看起来它更可能打印N个最小值-除非,正如已经指出的,你先做RHS,所以…你可能会没事的。你能把它作为答案贴出来吗?我会接受的it@WhozCraig:是的,我看到它将首先使用最大值。我怀疑在打印出当前节点之前,代码应该在leaf->right
上的递归之后检查*n>0
,因为n
的值可能已经通过调用缩小了。