2016-07-22 355 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