这段代码怎么了? http://www.spoj.pl/problems/ARRAYSUB/

时间:2012-07-02 18:49:22

标签: c

#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
    long int n;
    struct node *l,*r;
}node;
typedef node * tree;
tree maknod(long int d)
{
    tree t;
    t=(tree)malloc(sizeof(tree));
    t->n=d;
    t->l=t->r=NULL;
    return t;
}

tree ins(tree t,long int d)
{
    if(t==NULL)
    return maknod(d);
    else if(t->n > d)
    t->l=ins(t->l,d);
    else 
    t->r=ins(t->r,d);
    return t;
}
long int findmax(tree t)
{
    if(t->r==NULL)
    return (t->n);
    findmax(t->r);
}
tree del(tree t,long int d)
{
    if(t!=NULL)
    {
    if(t->n==d)
    {
        if(t->l==NULL && t->r==NULL)
        return NULL;
        if(t->l==NULL)
        return t->r;
        if(t->r==NULL)
        return t->l;
        t->n=findmax(t->l);
        t->l=del(t->l,t->n);
    }
    if(t->n>d)
    t->l=del(t->l,d);
    if(t->n<d)
    t->r=del(t->r,d);
}
return t;
}
long int print(tree t)
{
    if(t->r==NULL)
    return t->n;
    print(t->r);
}
int main()
{
long int num,k,i;
tree t=NULL;
scanf("%ld ",&num);
long int a[num];
for(i=0;i<num;i++)
scanf("%ld",&a[i]);
scanf("%ld",&k);
for(i=0;i<k;i++)
{
    t=ins(t,a[i]);
}
for(i=0;i<=num-k;i++)
{
if(i<num-k)
{
printf("%ld",print(t));
printf(" ");
}
else
printf("%ld",print(t));
t=del(t,a[i]);
ins(t,a[i+k]);
}
return 0;
}
  
    

http://ideone.com/ZA3Xb     在spoj中运行五个测试用例,在第六个测试用例中作为分段错误。     给定num是数组中的元素,然后a []包含num个元素.k是子数组的大小。我们必须在[]中的每个大小为k的子数组中打印max元素。

  

1 个答案:

答案 0 :(得分:3)

tree t = malloc( sizeof( tree ));

不正确。这就是混淆typedef是一个坏主意的一个原因。 一个好的习语是:

node *t;
t = malloc( sizeof *t )

如果你想保留typedef,你需要像

这样的东西

t = malloc(sizeof(node))。

代码中可能存在其他问题......