2015-10-17 74 views
2

我正在爲所有節點添加到數組列表names的樹進行遞歸方法。此方法無法將葉節點(沒有子節點的節點)添加到陣列列表names以樹方法打印所有節點

它只將根和根的子節點添加到數組列表中。爲了解決其他遞歸問題,我需要知道什麼是錯誤的。

private ArrayList<TreeNode> names = new ArrayList<>(); 
public ArrayList<TreeNode> getAllNodes(){ 

    //BASIS CASES: 
    names.add(this); 

    if(isLeaf()){ 
     names.add(this); 
     return names; 
    } 

    //RECURSIVE CASES: 
    for(TreeNode child : children){ 
     child.getAllNodes(); 
     names.add(child); 

    } 

    return names; 
} 

其他代碼:

//prints the nodes out 
ArrayList<TreeNode> theNodes = treeRoot.getAllNodes(); 
       System.out.println(""); 
       for (TreeNode n : theNodes) System.out.print(n.getLabel() + " "); 
       repaintCanvas(canvas); 

//hard coded nodes 
treeRoot = new TreeNode(TreeNode.Gender.MALE, "John", null); 
     itemsToDraw.add(treeRoot); 

     TreeNode Louis = new TreeNode(TreeNode.Gender.MALE, "Louis", treeRoot); 
     TreeNode Sue = new TreeNode(TreeNode.Gender.FEMALE, "Sue", treeRoot); 
     TreeNode Anne = new TreeNode(TreeNode.Gender.FEMALE, "Anne", Sue); 
     TreeNode Sam = new TreeNode(TreeNode.Gender.MALE, "Sam", Sue); 
     TreeNode Anne2 = new TreeNode(TreeNode.Gender.FEMALE, "Anne", Sam); 
     TreeNode Ed = new TreeNode(TreeNode.Gender.MALE, "Ed", Louis); 
     TreeNode Frank = new TreeNode(TreeNode.Gender.MALE, "Frank", Louis); 

輸出:

約翰·路易斯·薩

回答

2

我認爲,根本的問題是,當你這樣做只是這一點:

child.getAllNodes(); 

您沒有使用該方法的響應...

也許您的意思是這樣做?

names.addAll(child.getAllNodes());