107. Binary Tree Level Order Traversal II
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] ]
按层遍历,不过是从下往上,依然是Iteratively, recursively都可以。。。
加List的时候从头加就好了。
Iteratively:
public class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
if (root == null) return res;
Queue<TreeNode> q = new LinkedList<TreeNode>();
int cur = 0;
int left = 1;
q.add(root);
List<Integer> tempList = new ArrayList<>();
while (!q.isEmpty()) {
TreeNode temp = q.poll();
left--;
tempList.add(temp.val);
if (temp.left != null) {
q.add(temp.left);
cur++;
}
if (temp.right != null) {
q.add(temp.right);
cur++;
}
if (left == 0) {
res.add(0,tempList);
tempList = new ArrayList<>();
left = cur;
cur = 0;
}
}
return res;
}
}
Recursively:
想了一下最好是pre-order,便于添加List..
public class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
helper(res, root, 0);
return res;
}
public void helper(List<List<Integer>> res, TreeNode root, int level) {
if (root == null) return;
if (level >= res.size()) {
List<Integer> tempList = new ArrayList<Integer>();
tempList.add(root.val);
res.add(0,tempList);
} else {
res.get(res.size() - 1 - level).add(root.val);
}
helper(res,root.left,level+1);
helper(res,root.right,level+1);
}
}

浙公网安备 33010602011771号