Reputation: 87
I am making a recursive method for a tree that adds all nodes to an array list names
. This method is not able to add the leaf nodes (nodes that have no children) to the arraylist names
.
It only adds the root and the immediate children of the root to the array-list. I need to know what's wrong in order to solve other recursive problems.
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;
}
Other code:
//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);
Output:
John Louis Sue
Upvotes: 2
Views: 1193
Reputation: 12393
I believe the basic problem is when you do just this:
child.getAllNodes();
You are not using the response from that method...
Perhaps you meant to do this?
names.addAll(child.getAllNodes());
Upvotes: 2