'How can I get all leaf nodes of a tree?

Suppose I have a node in a tree, how can I get all leaf nodes whose ancestor is this node?

I have defined the TreeNode like this:

public class TreeNode<T>
{
    /** all children of the node */
    private List<TreeNode<T>> children = new ArrayList<TreeNode<T>>();
    /** the parent of the node, if the node is root, parent = null */
    private TreeNode<T> parent = null;
    /** the stored data of the node */
    private T data = null;

    /** the method I want to implement */
    public Set<TreeNode<T>> getAllLeafNodes()
    {
        Set<TreeNode<T>> leafNodes = new HashSet<TreeNode<T>>();
        return leafNodes;
    }
}


Solution 1:[1]

Create a stack and push root node.

Stack<Node> st = new Stack<>();
st.push(root);      
CL(st.peek());

Call the recursive method.

public void CL(Node root){
        if (st.peek().left == null && st.peek().right == null ) {//if leaf node
            System.out.println(st.peek().data);//print
            st.pop();
            return;
        }
        else{
            if(st.peek().left != null){
                st.add(st.peek().left);
                CL(st.peek());
            }
            if(st.peek().right != null){
                st.add(st.peek().right);
                CL(st.peek());
            }
        }
        st.pop();
    }

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 thenish