Я работал над функцией, которая в основном должна печатать двоичное дерево, которое у меня есть в программе, и у меня возникла проблема. дерево динамическое, а значения - числа, большее новое число будет добавлено в правую сторону, а меньшее - в левую.
в основном, дерево должно быть напечатано так: допустим, есть только корень со значением 3, тогда вывод будет:
(3)
после добавления узла со значением 2:
((2)<(3))
вывод, который я получаю:
(((2))<(3))
после добавления 8:
((2)<(3)>(8))
вывод, который я получаю:
(((2))<(3)>((8))))
после добавления 7:
((2)<(3)>((7)<(8)))
вывод, который я получаю:
(((2))<(3)>(((7))<(8)))
и так далее... обратите внимание, что первый узел, корень, имеет другую структуру, поэтому разделение на 2 случая.
основная проблема в том, что я получаю слишком много скобок.
это код, который я написал до сих пор:
void PrintTree(Root* root, Node* currentNode,Boolean isFirst) {
if (root == NULL)
return;
else if (root->right == NULL && root->left == NULL) {
root->PrintObject(root->value);
printf("\n");
} else {
printf("(");
if (isFirst == TRUE) {
if (root->left != NULL) {
PrintTree(root,root->left, FALSE);
printf("<");
}
root->PrintObject(root->value);
if (root->right != NULL) {
printf(">");
PrintTree(root,root->right, FALSE);
}
} else {
if (currentNode->left != NULL) {
PrintTree(root,currentNode->left, FALSE);
printf("<");
}
root->PrintObject(currentNode->value);
if (currentNode->right != NULL) {
printf(">");
PrintTree(root,currentNode->right, FALSE);
}
}
printf(")");
}
return;
}
void PrintObject(void* value) {
printf("(%d)", *(int*)value);
return;
}
был бы признателен за любую помощь. Благодарность!