2015-10-17 69 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());