2013-03-21 14 views
5

Zrobiłem tę metodę rekursywną, która oblicza najdłuższą ścieżkę w drzewie binarnym. ścieżkę jego sklepu w arralist, a następnie wrócił. jednak musiałem zadeklarować globalną listę zmiennych tablicy. czy możliwe jest wykonanie tej metody, ale jego zmienna listy tablic jest lokalna.jak zrobić zmienną lokalną

public static <T> ArrayList<T> longestPath(BinaryNode<T> root){ 
    //ArrayList path = new ArrayList(); 

    if(root == null) return null; 

    if(height(root.left) > height(root.right)){ 
     path.add(root.element); 

     longestPath(root.left); 


    }else{ 
     path.add(root.element); 

     longestPath(root.right); 

    } 

    return path; 

} 

Powód musiałem zrobić to globalny, ponieważ jego rekurencyjny programu i za każdym razem to nazywać się będzie utworzyć nową listę obiektów tablica zmiennej z różnymi adresami, jeśli wiesz co mam na myśli.

+2

Nie ma zmiennych globalnych w Javie ...? –

+1

@RichardJPLeGuen: prawie na pewno oznaczał pole "statyczne". –

Odpowiedz

5

Co należy zrobić, to mieć swoją główną funkcją tworzenia ArrayList i przekazać go do funkcji pomocnika, który wykonuje całą pracę; np .:

public static ArrayList longestPath(BinaryNode root) 
{ 
    ArrayList path = new ArrayList(); 
    return longestPathHelper(root, path); 
} 

private static ArrayList longestPathHelper(BinaryNode root, ArrayList path) 
{ 
    // Existing code, except recursive calls pass path as well 
} 
11

Przepuścić ArrayList w parametrach metoda:

public static <T> List<T> longestPath(BinaryNode<T> root, List<T> path){ 

Następnie po wykonaniu wywołanie rekurencyjne:

longestPath(root.right, path); 

Wystarczy zdać new Arraylist() podczas wywoływania metody początkowo

3

Jeśli Potrzebuję dostępu do zmiennej i nie mogę uczynić jej globalną, twoja druga opcja to przekazanie jej jako parametru:

public static <T> ArrayList<T> longestPath(BinaryNode<T> root, ArrayList path) { 
    //... 
3

jeśli przejdą ArrayList do funkcji rekurencyjnej tak:

public static <T> ArrayList<T> longestPath(BinaryNode<T> root, ArrayList path){ 
ArrayList lPath = path; 

if(root == null) return null; 

if(height(root.left) > height(root.right)){ 
    lPath.add(root.element); 

    longestPath(root.left, lPath); 


}else{ 
    lPath.add(root.element); 

    longestPath(root.right, lPath); 

} 

return lPath; 

} 
Powiązane problemy