Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从BST打印n个最大值_C_Algorithm_Pointers_Binary Search Tree - Fatal编程技术网

C 从BST打印n个最大值

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

我正试图打印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)--
来减小所指向的值


有了这一点,你的代码大部分都在那里了——尽管我对“最小的优先”有一些恼人的评论。但是,我认为在递归调用
bt_printN(leaf->right,n)之后需要检查
n
*n==1
,它会向右递归,但在RHS下的每个节点都会打印其值,即使只需要一个值。

传递正常;不是的是递减<代码>*n--
递减指针,而不是指向的值;您需要
(*n)--
来减小该值。其他一切是否正常是一个单独的讨论;看起来它更可能打印N个最小值-除非,正如已经指出的,你先做RHS,所以…你可能会没事的。你能把它作为答案贴出来吗?我会接受的it@WhozCraig:是的,我看到它将首先使用最大值。我怀疑在打印出当前节点之前,代码应该在
leaf->right
上的递归之后检查
*n>0
,因为
n
的值可能已经通过调用缩小了。