给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历).
public class LevelOrderBottom {
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
if (root == null) {
return res;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
TreeNode last = root;
TreeNode nlast = null;
List<Integer> list = new ArrayList<>();
while (!queue.isEmpty()) {
root = queue.poll();
list.add(root.val);
if (root.left != null) {
queue.offer(root.left);
nlast = root.left;
}
if (root.right != null) {
queue.offer(root.right);
nlast = root.right;
}
if (last == root && !queue.isEmpty()) {
last = nlast;
nlast = null;
res.add(new ArrayList<>(list));
list.clear();
}
}
res.add(list);
Collections.reverse(res);
return res;
}
}