Flatten List Iterator

Question (LI.22)

Given a list of nestedInteger, flatten into a list of integers. Or equivalently, given a n-ary tree, find all the leaves in preorder.

Preorder Traversal

Step 1 Define recursion
flatten(List<Integer> result, List<NestedInteger> nestedList)
find all the leaves in preorder of this tree or nestedList

Step 2 Recursive calls
for (int i = 0; i < nestedList.size(); i++)
    if (!nestedList.get(i).isInteger())
        flatten(result, nestedList, i)
    else
        result.add(nestedList.get(i).getInteger())

Step 3 Base case
if leave add to result
public List<Integer> flatten(List<NestedInteger> nestedList) {
    List<Integer> result = new ArrayList<>();
    if (nestedList == null || nestedList.size() == 0) {
        return result;
    }
    flattenHelper(result, nestedList);
    return result;
}

private void flattenHelper(List<Integer> result, 
                           List<NestedInteger> nestedList) {
    for (int i = 0; i < nestedList.size(); i++) {
        if (!nestedList.get(i).isInteger()) {
            flattenHelper(result, nestedList.get(i).getList());
        } else {
            result.add(nestedList.get(i).getInteger());
        }
    }
}

Solve by Recursion

Iterative BFS

Iterative layer by layer

Last updated