我正在尝试编写一个将返回的递归函数 二叉搜索树中的最小值。
int RecursiveFindMin(Tree t) {
if (t==NULL)
return -1;
else {
if (t!=NULL)
RecursiveFindMin(t->left);
}
return t->val;
}
我希望获得BST中的最小值
相反,我大部分时间都获得了第二小的结果! 我不是很擅长递归函数,我很感激 帮助!
答案 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
用于树中不存在的值。