如何编写一个递归函数,返回BST中的最小值?

时间:2017-12-08 20:59:30

标签: c recursion binary-search-tree

我正在尝试编写一个将返回的递归函数 二叉搜索树中的最小值。

int RecursiveFindMin(Tree t) {
  if (t==NULL)
    return -1;
  else {
    if (t!=NULL)
        RecursiveFindMin(t->left);
  }

  return t->val;   
}

我希望获得BST中的最小值

相反,我大部分时间都获得了第二小的结果! 我不是很擅长递归函数,我很感激 帮助!

2 个答案:

答案 0 :(得分:0)

当您对函数进行递归调用时,会丢弃返回值。所以递归实际上什么都不做。您所做的只是返回传入的第一个节点的值。

您还没有使用正确的退出条件。您希望在当前节点为NULL时停止(因为您可以用它做什么呢?)但是当 left 节点为NULL时。然后你想要的值在那个节点。

因此更改条件以检查左节点,并返回递归调用的值:

int RecursiveFindMin(Tree t) {
  if (t->left==NULL)
    return t->val;   
  else {
    return RecursiveFindMin(t->left);
  }
}

答案 1 :(得分:0)

您将返回每个左节点值。所以最后它返回根值。您应该找到最左边的节点并将该值固定为最小值。

const int kInf = 100000000;
int RecursiveFindMin(Tree t) {
    if (t == NULL) return kInf;
    int v = RecursiveFindMin(t->left);
    return v == kInf? t->val : v;   
}

我已将kInf用于树中不存在的值。