给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如:
给定二叉树 [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回其自底向上的层次遍历为:
[ [15,7], [9,20], [3] ]
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
List<Integer> temp = new ArrayList<>();
if(root == null) return result;
int num = 1;
int next = 0;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
TreeNode node = queue.poll();
temp.add(node.val);
num--;
if(node.left != null){
queue.add(node.left);
next++;
}
if(node.right != null){
queue.add(node.right);
next++;
}
if(num == 0){
num = next;
next = 0;
result.add(0, temp);
temp = new ArrayList<>();
}
}
return result;
}