2016-09-25 1 views
2
package test; 

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.io.IOException; 

public class TreeOperations { 
public static int minDepthBT(int[] a, int i) 
{ 
if((i<1)|| (i<a.length)) 
    return 0; 
int x = minDepthBT(a[2*i],(2*i)); 
int y = minDepthBT(a[2*i+1],(2*i +1)); 
if(y==0) return y+1; 
else if(x==0) return x+1; 
return Math.min(x,y); 
} 


public static void main(String[] akjhk) throws IOException 
{ 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    PrintWriter out = new PrintWriter(System.out,true); 
    int n = Integer.parseInt(br.readLine()); 
    int a[] = new int[n]; 
    String s[] = br.readLine().split(" "); 
    for(int i=0;i<n;i++) 
    { 
     a[i] = Integer.parseInt(s[i]); 
    } 
    int depth = minDepthBT(a,1); 
    out.println(depth); 
    } 
} 

上記のコードでは、エラーは2つの写真onetwoに表示されています。Javaでは、再帰的メソッドに配列を渡すと、エラーが発生します。

int Sum(int a[]) 
    { 
    int sum =0; 
    for(int i=0;i<a,length;i++) sum += a[i]; 
    return sum; 
    } 

エラーが受信されない:

Iは、例えば、反復法を使用

。再帰的メソッドの場合はどうなりますか?

+2

お願いします。変数には1文字の名前を使用しないでください(forループのカウンタとして)。あなたが入力した時間を節約して1秒...あなたが "それが何を意味するのか"を聞くときに後で過ごしたのです。(まあ、入力に1秒を節約しましたが、思考には数分を費やして保証します!) – GhostCat

+0

cuzこれは[2 * i]は配列にないintに解決されます –

+0

ありがとう:) @GhostCat。 – zerobyzero

答えて

0

あなたの問題はここにある:例えば

int x = minDepthBT(a[2*i],(2*i)); 

あなたのメソッドは、intの配列とintの2つのパラメータを持つと宣言されています。

ここでは、2つののint値を使用してメソッドを呼び出しています。

短いストーリー:あなたのメソッドを再帰的に呼び出すとき、期待されるパラメータを正確に提供する必要があります。あなたの場合:おそらく(a, 2*i)で電話したいと思うでしょう。

EDIT:

それとも、あなたのような何かをしなければならないでしょう:

int arrayForRecursiveCall[] = new int[whatever length]; 
... then you put some values in that array and then 
minDepthBT(arrayForRecursiveCall, 2*i); 

としては言った - コアの事がある:あなたが最初の引数として配列を渡す必要があります。単一int intt仕事!

+0

私は、再帰呼び出しは配列がある位置のアドレスを意味していると理解しています。私は[2 * i]のアドレスを渡したいと思います。私はまだそれをどうやってやっているのですか? – zerobyzero

+0

私の更新された回答を参照してください。 – GhostCat

0

IDEが認識しているように、メソッドminDepthBT(int []、int)は引数(int、int)には適用されません。言い換えれば、配列の要素である配列を配列として渡そうとしています。

int[] array = new int[10]; 
//array - this is how we pass array as argument 
//array[1] - this how we pass array's element as argument 

minDepthBT(array[1], someInteger); // this is what you are doing 
minDepthBT(array, someInteger); // this is what you should do 
関連する問題