c - 打印 BST 中的 n 个最大值

标签 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(leaf->left,n);
    }
}

这行不通,将 n 值传递给此类递归函数的正确方法是什么?

最佳答案

主要问题不是传递 n 的方式;主要问题是 *n-- 递减指针,而不是指向的值。您需要 (*n)-- 来减少指向的值。

修复了这个问题后,您的代码就完成了大部分工作——尽管我的红鲱鱼评论是“最小优先”。但是,我认为您需要在递归调用 bt_printN(leaf->right, n); 之后以及函数打印自己的节点之前检查 n。您不必在第二次递归调用之前进行检查,尽管这样做可能是次要(最小)优化。如所写,如果 *n == 1 在入口处,它向右递归,但随后 RHS 向下的每个节点打印其值,即使只需要一个。

关于c - 打印 BST 中的 n 个最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27976370/

相关文章:

c++ - 像 native Windows 应用程序中的 FireFox 中的选项卡控件

c++ - Eclipse,C/C++,链接同一工作区中的两个项目

algorithm - 根据 n 项、总面积和 H :W ratio 创建最优网格

c++ - 用c++释放内存的最好方法是什么

c++ - 为什么 union 的大小不是最大成员的大小?

c++ - 非 NULL 保留指针值

php - 用ipv6划分子网

algorithm - 在有向未加权图中查找两个节点之间的所有最短路径的数量

c++ - 为什么当我将一个指针字符串初始化为另一个非指针字符串时编译失败?

c++ - Direct3D typedef 用法