【发布时间】:2020-06-18 11:14:13
【问题描述】:
我有以下功能:
void treetraverse (tnode *node)
{
if (node == NULL)
{
return;
}
fprintf(stdout,"%d",node->val);
if (node-> d == 'L')
{
treetraverse(node->r);
treetraverse(node->l);
}
else
{
treetraverse(node->l);
treetraverse(node->r);
}
}
其中 d 是方向,可以是“L”或“R”。而 node->r 和 node->l 分别是节点的左右子节点。我试图从中删除尾递归,以便它在功能上是等效的 - 它现在进行两个递归函数调用,但我希望它进行一个。如何重写函数以实现此目标?谢谢。
【问题讨论】:
-
你的问题与尾递归无关。
-
因为你必须决定顺序,而且由于有左和右,你必须使用两个调用。所以你不能消除一个。
-
如果你有一个父指针,你可以消除递归并直接遍历树。
-
@PaulOgilvie 好吧,第二个调用是尾递归...
标签: c recursion binary-tree tail-recursion tree-traversal