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 resultpublic 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