Я пытаюсь пересечь двоичное дерево, построенное с помощью входных данных с клавиатуры. Данные вставляется в двоичное дерево успешно. У меня есть оператор switch, где «случай 3» должен пересекать (и печатать) двоичное дерево с нерекурсивным алгоритмом обхода порядка. Однако, когда вызывается «случай 3», он дает ошибку EXC_BAD_ACCESS, которая никогда не имеет для меня никакого смысла. Я был бы более чем счастлив, если бы кто-то помог мне с этим.Не удается пересечь двоичное дерево с нерекурсивным методом порядка порядка
(RootPtr это верхний -Уровень 0- узел бинарного дерева, определенной во всем мире, и GetNodeS в основном функция инициализатор (используя таНос) для типа указателей указатель стека.)
Спасибо всем заранее.
Вот соответствующий код:
Это Struct определения,
Typedef struct treeItem
{
int data;
struct treeItem *left;
struct treeItem *right;
}Tree , *TreePtr;
typedef struct stackItem
{
TreePtr t;
struct stackItem *next;
}Stack , *StackPtr;
Эти Push-и поп функции,
void PushS (TreePtr TreePointer)
{
StackPtr TemPtr;
GetNodeS(&TemPtr);
(*TemPtr).t = TreePointer;
(*TemPtr).next = S;
S = TemPtr;
}
void PopS(TreePtr TreePointer)
{
StackPtr TemPtr;
GetNodeS(&TemPtr);
if (S != NULL)
{
TreePointer = (*S).t;
TemPtr = S;
S = (*S).next;
FreeNodeS(TemPtr);
}
else
printf("\nEmpty stack!");
}
Это функция перемещения,
void iterative (TreePtr TemPtr)
{
DONE = 0;
TemPtr = RootPtr;
S = NULL;
if(items==0)
{
printf("\nTree is empty.\n\n");
DONE = 1;
}
else
{
printf("\nIterative nonrecursive inorder traversal:");
while (DONE == 0)
{
if(TemPtr != NULL)
{
PushS(TemPtr);
TemPtr = (*TemPtr).left;
}
else
if(S != NULL)
{
PopS(TemPtr);
printf(" %d", (*TemPtr).data); //the line I get the ERROR
TemPtr = (*TemPtr).right;
}
else
{
DONE = 1;
}
}
}
}
И это дело выключателя, когда я пытаюсь вызвать функцию итерационной пересекающей,
case 3:
TreePtr TemPtr;
GetNode(&TemPtr);
iterative(TemPtr);
break;
Опубликовать [MCVE] на свой вопрос пожалуйста. –
Чтобы быть полными и минимальными, мне пришлось разделить мой код на блоки и предоставить только те, которые относятся к ОШИБКЕ. Фактический код - около 400 строк, что, по моему мнению, даже не близко к тому, которое я опубликовал. –
Почему вы игнорируете параметр 'iterative'? – molbdnilo