这里是我的函数迭代inorder遍历。 但是,当我执行它时,我得到了分段错误。 我正在使用堆栈进行遍历。在给定的程序中,我还有一个递归函数用于inorder遍历来检查我的create()函数是否正在工作。迭代Inorder遍历
我正在将节点推向堆栈并移动到节点的左侧,然后我弹出堆栈中的节点并打印它,并通过执行 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是啊,我做到了,但我不能弄明白 –