2011-02-14 144 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的功能還沒有認識 這是什麼功能?