#include<stdio.h>
#include<math.h>
void insert(int *,int);
int main(int argc, char argv[])
{
int tree[1000];
memset(tree,'\0',1000);
int i=1;
while (!argv[i])
{
insert(tree,atoi(argv[i]));
}
int depth=0;
printf("Enter depth");
scanf("%d",&depth);
int x=pow(2,depth);
int y=2x-1;
int count=0;
for(;x<=y;x++)
{
if((tree[x]!=NULL) && (tree[2x+1]==NULL) && (tree[2x]==NULL))
{
count++;
}
}
printf("Number of leaf nodes is %d", count);
}
void insert(int *tree,int gmail)
{
int i=1;
if(tree[i]==NULL)
{
tree[i]=gmail;
}
else
{
if(gmail>tree[i])
{
insert(tree[2i+1],gmail);
}
else
insert(tree[2i],gmail);
}
}
答案 0 :(得分:4)
你不能只写这个:
insert(tree[2i+1],gmail);
您需要明确提供乘法运算,即:[2*i+1]
或[2*i]
。
另外,由于tree[2*i0]
是int
,而不是int*
,您需要它的地址:
insert(&(tree[2*i+1]),gmail);
和
insert(&(tree[2*i]),gmail);
或者,您可以使用:
insert(tree + (2*i), gmail);
另一个错误是pow
来电。 pow返回一个double值,而不是int,因此您需要转换回int:
int x = (int) pow(2.0, depth);
答案 1 :(得分:1)
一旦你开始编译,你就想解决这个问题:
while (!argv[i])
{
insert(tree,atoi(argv[i]));
}
这将是1)根本不执行,或2)给出无限循环。另外,if (!argv[1])
相当于if (argv[i] == NULL)
,所以如果只有没有值可供读取,那么你正试图读取一个值。
答案 2 :(得分:1)
#include<stdio.h>
#include<math.h>
void insert(int *,int);
int main(int argc, char argv[])
{
int tree[1000];
memset(tree,'\0',1000);
int i=1;
while (!argv[i])
{
insert(tree,atoi(argv[i]));
}
int depth=0;
printf("Enter depth");
scanf("%d",&depth);
int x=pow(2.0,depth);
int y=2*x-1;
int count=0;
for(;x<=y;x++)
{
if((tree[x]!=NULL) && (tree[2*x+1]==NULL) && (tree[2*x]==NULL))
{
count++;
}
}
printf("Number of leaf nodes is %d", count);
}
void insert(int *tree,int gmail)
{
int i=1;
if(tree[i]==NULL)
{
tree[i]=gmail;
}
else
{
if(gmail>tree[i])
{
insert(tree,tree[2*i+1]);
}
else
insert(tree,tree[2*i]);
}
}
这段代码有效,只在我的编译器中memset函数无法识别 这个功能是什么?
答案 3 :(得分:0)
看起来您正在使用2i
和2x
作为数组的下标。这与您使用它的方式无效。尝试将2i
和2 * i
的{{1}}替换为2x
。
答案 4 :(得分:0)
2i+1
无效。试试(2*i) + 1
答案 5 :(得分:0)
2i
和2x
不是有效的表达式,您应该2*i
和2*x
!
下次发布不编译的行和一些解释时,它会更容易阅读..