может быть, вам нужен другой взгляд на проблему. думать об узле как
<left subtree> p->data <right subtree>
В данный момент ваши узлы печатаются как
<left subtree> p->data ", " <right subtree>
что приводит к трейлингу ", "
каждый раз
Но вы не хотите печатать ", "
на каждом элементе.
-> Вы просто хотите напечатать ", "
(в нужном месте), когда ( и только когда! ) вы спускаетесь в поддерево, так как в противном случае нет необходимости в разделителе ...
Существует очень простой, очень элегантный способ достижения этого без каких-либо дополнительных данных, необходимых для проведения ... Не стесняйтесь спрашивать, нужна ли вам дополнительная помощь ...
Обновление:
так как я думаю, что ваша домашняя работа к настоящему времени закончена, я хочу показать свое решение:
void BinaryTree::inorder(tree_node* p)
{
if(p != NULL)
{
if(p->left)
{
inorder(p->left);
cout << ", "; // print ", " everytime after you descended to the left
}
cout << p->data;
if(p->right)
{
cout << ", "; // print ", " everytime before you descend to the right
inorder(p->right);
}
}
}
должно выглядеть
<left subtree ", "> p->data <", " rightsubtree>