2016-07-22 358 views
1

通过递归返回单个值就可以。但是,如果我想返回递归遍历每个调用的值的列表,该怎么办?这是我的代码。如何通过java中的递归返回值列表?

public void inOrder(Node focusNode) { 

    /* ArrayList<Integer> tempList = new ArrayList<Integer>(); */ 

    if (focusNode != null) { 

    inOrder(focusNode.getLeftNode()); 
    System.out.println(focusNode); 
    /* tempList.add(focusNode.getElement()); */ 
    inOrder(focusNode.getRightNode()); 

    } 

/* int[] elems = new int[tempList.toArray().length]; 
    int i = 0; 
    for (Object o : tempList.toArray()) 
    elems[i++] = Integer.parseInt(o.toString()); */ 

    //return tempList; 
} 

遍历时的印刷值给出了预期的输出。但是存储这些值不起作用。它只返回一个列表中的单个值。有人可以帮我弄这个吗?

回答

1

为什么你不只是传入一个数组列表的引用以及你的起始节点?在您的inOrder方法运行后,您将获得一系列有序的值,您可以随意使用它们。

// method signature changed 
public void inOrder(Node focusNode, ArrayList vals) { 

    /* ArrayList<Integer> tempList = new ArrayList<Integer>(); */ 

    if (focusNode != null) { 
     // args changed here 
     inOrder(focusNode.getLeftNode(), vals); 
     // adding node to array list rather than dumping to console 
     vals.add(focusNode); 
    /* tempList.add(focusNode.getElement()); */ 
     inOrder(focusNode.getRightNode()); 
} 
+0

**非常感谢你!**这比返回列表好得多。 ':)'还有一个问题,java是否也通过引用传递变量? – GauravP

+0

@GauravP请:如果你能够在这里写下这样的问题......那么你也可以把这些相同的字符串放到搜索引擎中。 SO不是“编程学校”,老师会向你解释记录数十亿次的事情。这并不意味着无礼;在这种情况下,这个网站是关于......还是不是。换句话说:你需要做“先前的研究”;特别是当你是初学者的时候:请理解,你可以提出的任何“理论”问题......在这里都曾被问到过。并回答。多。时报。 – GhostCat

+0

@GhostCat我完全明白这一点。为此道歉。它不会再发生。 – GauravP