Я работал над функцией, которая в основном должна печатать двоичное дерево, которое у меня есть в программе, и у меня проблема. дерево - это динамит, а значения - числа, в правой части будет добавлен новый номер, а в левой - меньший.печатать двоичное дерево рекурсивно inorder в c
в основном то, как дерево должно быть напечатано это: скажем, есть только корень со значением 3, то выход будет:
(3)
после добавления узла со значением 2 :
((2)<(3))
значение выходной я получаю:
(((2))<(3))
после добавления 8:
((2)<(3)>(8))
Выходной сигнал я получаю:
(((2))<(3)>((8))))
после добавления 7:
((2)<(3)>((7)<(8)))
значение выходной я получаю:
(((2))<(3)>(((7))<(8)))
и т. д. ... заметили, что первое n ode, корень имеет другую структуру, поэтому разделение на 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;
}
был бы признателен за любую помощь. спасибо!
'корне-> PrintObject (...)' не выглядит правильно. И вы, вероятно, могли бы упростить все, используя также тип Node для корневого узла. – Inspired
эй, я не понимаю, в чем проблема в root-> PrintObject()? – Ryan
Ах, извините, я пропустил предложение о том, чтобы получить слишком много скобок. (Ну, 'root-> PrintObject' не должен компилироваться в' C', если 'Root' не содержит члена' PrintObject', который является указателем на функцию, и я действительно не знаю, не так ли. вы приводите пример того, какой результат вы получаете по сравнению с тем, что вам нужно? – Inspired