2011-02-14 125 views
2
#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

将代码格式化为至少可读! – ypnos 2011-02-14 17:19:58

+0

请:有礼貌·告诉我们你需要什么。不要只发布代码。 – Benoit 2011-02-14 17:20:01

回答

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 cal湖pow返回一个double值,不是int,所以你需要转换回一个int:

int x = (int) pow(2.0, depth); 
0

看起来你正在使用2i2x作为标到一个数组。这不符合您的使用方式。尝试用2 * i2x替换出现2i2 * x

0

2i2x是无效表达式,您应该将2*i和!

下一次发布在它不编译和一些说明,会更易于阅读的行..

1

一旦你得到它来编译,你要解决这个问题:

while (!argv[i]) 
{ 
    insert(tree,atoi(argv[i])); 
} 

这将1)根本不执行,或2)给一个无限循环。 if (!argv[1])等效于if (argv[i] == NULL),所以如果只有在没有值存在的情况下才会读取值。

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的功能还没有认识 这是什么功能?