如何使变量局部

Lex*_*ito 5 java

我做了这个递归方法,计算二叉树中最长的路径.它的存储路径在一个集会上然后返回.但是,我不得不声明数组列表变量全局.是否有可能使这个方法,但他的数组列表变量是本地的.

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;

}
Run Code Online (Sandbox Code Playgroud)

我必须使它成为全局的原因是因为它是一个递归程序,每次它调用自身它将创建一个具有差异地址的新数组列表对象变量,如果你知道我的意思.

cow*_*wls 11

在方法参数中传递arraylist:

public static <T> List<T> longestPath(BinaryNode<T> root, List<T> path){
Run Code Online (Sandbox Code Playgroud)

然后当你进行递归调用时:

longestPath(root.right, path);
Run Code Online (Sandbox Code Playgroud)

new Arraylist()最初调用方法时只需传递一个


Joh*_*McG 5

你应该做的是让你的主函数创建一个ArrayList并将它传递给一个完成所有工作的辅助函数; 例如:

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
}
Run Code Online (Sandbox Code Playgroud)