从BST打印n个最大值

d

我正在尝试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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章