Вот моя функция для итеративного обхода порядка. Но когда я его выполняю, я получаю ошибку сегментации. Я использую стек для обхода. В данной программе у меня также есть рекурсивная функция для обхода порядка, чтобы проверить, работает ли моя функция create().Итеративный обход номера
Я нажимаю узел в стек и перемещаюсь влево от узла, после чего я вывожу узел из стека и печатаю его и направо, делая root=root->rlink
.
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node *llink;
struct node *rlink;
}Node;
typedef struct Stack
{
Node *a[10];
int top;
}stack;
void push(stack *s,Node *root)
{
if(s->top==9)
printf("FULL");
else
{
s->top++;
s->a[s->top]=root;
}
}
Node *pop(stack *s)
{
if(s->top==-1)
printf("Empty");
return s->a[s->top--];
}
void inorder(Node *root)
{
stack s;
s.top=-1;
int flag=1;
while(flag)
{
if(s.top!=9)
{
push(&s,root);
root=root->llink;
}
else{
if(s.top!=-1)
{
root=pop(&s);
printf("%d",root->data);
root=root->rlink;
}
else
flag=0;
}
}
}
void inor(Node *root)
{
if(root!=NULL)
{
inor(root->llink);
printf("%d",root->data);
inor(root->rlink);
}
}
Node *create(Node *root,int key)
{
if(root==NULL)
{
root=(Node *)malloc(sizeof(Node));
root->data=key;
root->rlink=root->llink=NULL;
}
else
{
if(key>root->data)
{
root->rlink=create(root->rlink,key);
}
else if(key<root->data)
{
root->llink=create(root->llink,key);
}
}
return root;
}
int main()
{
Node *h=NULL;
h=create(h,5);
h=create(h,1);
h=create(h,3);
h=create(h,8);
h=create(h,12);
h=create(h,51);
inorder(h);
//inor(h);
}
Вы использовали отладчик, чтобы сразу узнать, какая строка вызывает ошибку сегм и проследить выполнение вашей программы? – kaylum
Убедитесь, что вы завершаете диагностические сообщения печати с помощью новой строки (или используйте 'fflush (stdout);'). В противном случае вы никогда не увидите сообщение, если код сработает, что дает неверное представление о том, где произошел сбой. –
@kaylum yah Я сделал это, но я не могу это понять. –