我在这里具有递归函数,但是它会导致溢出错误,因此我需要将其更改为非收回函数。关于如何做的任何帮助将不胜感激!
void MergeSort(struct node** headRef)
{
node* head = *headRef;
node* a;
node* b;
if ((head == NULL) || (head->next == NULL))
{
return;
}
FrontBackSplit(head, &a, &b);
MergeSort(&a);
MergeSort(&b);
*headRef = SortedMerge(a, b);
}
通常,如果您具有溢出堆栈的树回收功能,这是一种直接的方法,将其转换为非收集者(而不是使用堆)是基本上分配的您自己的堆栈。
每当您的函数都会用一些参数调用自己时,而是将这些参数塞入struct
中,然后将struct
推入工作队列(我说"队列",但实际数据结构可以是std::stack
或std::queue
无论您是要以LIFO或FIFO订单处理项目)。现在,您可以在迭代循环中调用您的函数:迭代该队列直到空为空,弹出每组参数并使用它们调用您的功能(这可以在工作队列中添加新项目)。