-5
#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 では、5 つのテスト ケースで実行され、6 番目のテスト ケースではセグメンテーション エラーとして発生します。num が配列内の要素の数ではない場合、a[] には num 要素が含まれます。k はのサイズですサブ配列..サイズkの各サブ配列の最大要素を[]に出力する必要があります。

4

1 に答える 1

3
tree t = malloc( sizeof( tree ));

は正しくありません。これが、typedef の難読化が悪い考えである理由の 1 つです。良い慣用句は次のとおりです。

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

typedefを保持したい場合は、次のようなものが必要です

t = malloc( sizeof( ノード ))。

コードにはおそらく他の問題があります...

于 2012-07-02T18:51:31.767 に答える