#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元素。
答案 0 :(得分:3)
tree t = malloc( sizeof( tree ));
不正确。这就是混淆typedef是一个坏主意的一个原因。 一个好的习语是:
node *t;
t = malloc( sizeof *t )
如果你想保留typedef,你需要像
这样的东西t = malloc(sizeof(node))。
代码中可能存在其他问题......