題目:
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).
For example:
Given binary tree [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
return its bottom-up level order traversal as:
[
[15,7],
[9,20],
[3]
]
和102類似,只不過每層添加到最後列表的順序反過來了。
AC:
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> resultList = new LinkedList<>();
if (root == null) {
return resultList;
}
List<TreeNode> tmp = new LinkedList<>();
tmp.add(root);
while (!tmp.isEmpty()) {
List<Integer> valueList = new ArrayList<>();
int size = tmp.size();
for (int i = 0; i < size; i++) {
TreeNode node = tmp.get(0);
if (node.left != null) {
tmp.add(node.left);
}
if (node.right != null) {
tmp.add(node.right);
}
valueList.add(node.val);
tmp.remove(0);
}
resultList.add(0, valueList);
}
return resultList;
}
迭代,4ms
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> resultList = new LinkedList<>();
helper(resultList, root, 1);
return resultList;
}
private void helper(List<List<Integer>> resultList, TreeNode root, int depth) {
if (root == null) {
return;
}
if (resultList.size() < depth) {
resultList.add(0, new ArrayList<>());
}
resultList.get(resultList.size() - depth).add(root.val);
helper(resultList, root.left, depth + 1);
helper(resultList, root.right, depth + 1);
}
遞歸,3ms