我尝试为这个问题开发解决方案:此代码是:https://www.hackerrank.com/challenges/tree-level-order-traversal/problem的解决方案。
简而言之:我必须对树进行级别顺序翻转。
不幸的是,我有一个分段错误错误。
我一直在调试但是卡住了!我找不到问题。
我的实施如下:
struct que{
struct node *a;
int cap;
int front;
int rear;
};
struct que* createq()
{
struct que *q=(struct que *)malloc(sizeof(struct que));
q->front=-1;
q->rear=-1;
q->cap=1;
q->a=(struct node *)malloc(sizeof(q->cap));
return q;
}
struct que* resize(struct que* q)
{ q->cap=q->cap*2;
q->a=(struct node *)realloc(q->a,sizeof(q->cap));
return q;
}
int isempty(struct que* q)
{
if(q->front==-1&&q->rear==-1)
return 1;
return 0;
}
int isfull(struct que* q)
{
if((q->rear+1)%q->cap==q->front)
return 1;
return 0;
}
void insertion(struct que *q,struct node *n)
{
if(isempty(q)==1)
{
q->front=0;
q->rear=0;
}
if(isfull(q)==1)
{
q->a=(struct node *)realloc(q->a,q->cap);
}
q->a[q->rear]=*n;
q->rear=q->rear+1;
q->rear=q->rear%q->cap;
}
struct node* del(struct que *q)
{
struct node *temp;
(*temp)=q->a[q->front];
if(q->front==q->rear)
{
q->front=-1;
q->rear=-1;
return temp;
}
q->front= q->front+1;
q->front=q->front%q->cap;
return temp;
}
void levelOrder(node * root) {
if(root==NULL)
return;
struct que *q=createq();
insertion(q,root);
struct node *temp;
while(isempty(q)!=1)
{
temp=del(q);
printf("%d ",temp->data);
if(root->left!=NULL)
insertion(q,root->left);
if(root->right!=NULL)
insertion(q,root->right);
}
}
答案 0 :(得分:2)
q->a=(struct node *)malloc(sizeof(q->cap));
q->a=(struct node *)realloc(q->a,sizeof(q->cap));
肯定sizeof(q->cap)
,相当于sizeof(int)
,不是你想要的。
此外:
struct node *temp;
(*temp)=q->a[q->front];
在尝试使用其值之前,需要为temp
赋值。