print all root to leaf paths in a binary tree
public void PrintAllPossiblePath(Node node,List<Node> nodelist)
{
if(node != null)
{
nodelist.add(node);
if(node.left != null)
{
PrintAllPossiblePath(node.left,nodelist);
}
if(node.right != null)
{
PrintAllPossiblePath(node.right,nodelist);
}
else if(node.left == null && node.right == null)
{
for(int i=0;i<nodelist.size();i++)
{
System.out.print(nodelist.get(i)._Value);
}
System.out.println();
}
nodelist.remove(node);
}
}
nodelist.remove(node)
is the key, it removes the element once it prints the respective path
Call the recursive methods with:
printAllRootToLeafPaths(node.left, new ArrayList(path));
printAllRootToLeafPaths(node.right, new ArrayList(path));
What happens there when you pass the path
(instead of new ArrayList(path)
is that you use a single object in all methods call, which means that, when you return to the original caller, the object is not in the same state as it was.
You just need to create a new object and initialize it to the original values. This way the original object does not get modified.