Я пытаюсь пройти по двоичному дереву с помощью стека, обход прошел успешно, но программа в конце показывает значения мусора и ошибку сегментации. Я думаю, что это не будет повторяться снова и снова, но я не могу это исправить.
struct Node
{
int data;
Node *left;
Node *right;
Node(int x)
{
data = x;
left = NULL;
right = NULL;
}
};
Node *STACK[10] = { NULL };
int TOP = -1;
void push(Node *ptr)
{
if(TOP < 10) {
STACK[++TOP] = ptr;
}
}
void stackTraversal(Node *root)
{
Node *ptr = root; bool flag = false;
top:
while(ptr != NULL)
{
push(ptr);
ptr = ptr->left;
}
ptr = STACK[TOP];
TOP--;
while(ptr != NULL)
{
cout << ptr->data << " ";
if(ptr->right != NULL)
{
ptr = ptr->right;
flag = true;
break;
}
ptr = STACK[TOP];
TOP--;
}
if(flag)
goto top;
cout << "\nTHE END\n";
}
int main(int argc, char const *argv[])
{
Node *R = new Node(2);
Node *a = new Node(0);
Node *b = new Node(1);
Node *c = new Node(4);
Node *d = new Node(5);
Node *e = new Node(3);
R->right = c;
R->left = a;
a->right = b;
c->right = d;
c->left = e;
stackTraversal(R);
cout << endl;
return 0;
}
он дает следующий вывод.
Выход: - 0 1 2 3 4 5 -786491 ошибка сегментации (дамп ядра)