我正在尝试n
从BST打印最大值,我的指针肯定有问题,这是我的代码部分。
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)--
减少所指向的值。
修复该问题后,尽管我对“最小的优先”一字不漏,但您的代码已遍及整个过程。但是,我认为您需要n
在递归调用之后bt_printN(leaf->right, n);
和函数打印自己的节点之前进行检查。您不必在第二次递归调用之前进行检查,尽管这样做可能是次要的(最小)优化。按照书面规定,如果*n == 1
进入,它将向右递归,但是即使只需要一个节点,RHS下方的每个节点也会打印其值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句