【发布时间】:2021-06-19 04:12:35
【问题描述】:
我知道有人问过类似的问题,但我似乎无法通过递归调用的函数找到打印的答案。我正在尝试打印 AVL 树的前序、后序和中序遍历,并递归地实现了这些函数。
即
void inOrder(Node* root)
{
if(root != nullptr) {
inOrder(root->left);
cout << root->data << ", ";
inOrder(root->right);
}
}
除最后一个值外,数据应以逗号分隔,但我不知道该怎么做。我已经进行了研究,但在递归遍历 AVL 树时找不到任何似乎适用的东西。这是可能的还是我应该在没有递归的情况下实现这些功能?
【问题讨论】:
-
你不想在最后一个节点之后写逗号。现在你只需要弄清楚最后一个节点是什么以及如何检测它。
-
@Someprogrammerdude 通常更容易检测到第一个节点而不是最后一个节点。因此,您通常会在第一个元素之前而不是在最后一个元素之后跳过分隔符。
-
如果你想在你的遍历中打印一个节点之外的其他事情会发生什么?如果您是这样考虑的,那么您可能会考虑以稍微不同的方式实现遍历代码,而不是在遍历中硬编码特定操作(例如打印)。
-
@deW1 可能有多个带有
nullptr右分支的树节点。这样的节点在迭代中可能不是最终的。 -
@AndreySemashev 是的,我忘了它是一棵树