Ben Joshua S
Ben Joshua S

Reputation: 87

Print all nodes in a tree method

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

Answers (1)

eugenioy
eugenioy

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

Related Questions