-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 中运行五个测试用例,在第六个测试用例中作为分段错误运行.. 给定 num 不是数组中的元素,那么 a[] 包含 num 个元素.. k 是子数组.. 我们必须在 a[] 中的每个大小为 k 的子数组中打印最大元素。

4

1 回答 1

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

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

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

如果你想保留 typedef,你需要类似的东西

t = malloc(sizeof(节点))。

代码中可能还有其他问题...

于 2012-07-02T18:51:31.767 回答