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).
Tips:题目说的很绕,说白了相当于树的层次遍历
public List<List<Integer>> levelOrderBottom(TreeNode root) {
/**
* 类似于树的层次遍历,很容易想到BFS(广度优先搜索)
* 广度优先搜索需要用到队列,这里采用java集合体系中的Queue
*/
List<List<Integer>> result = new ArrayList<>();
if (root == null) {
return result;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
//与当前节点相邻的节点个数
int num = queue.size();
//存放这一层的所有节点
List<Integer> list = new ArrayList<>();
//遍历与当前节点相连的所有节点
while (num > 0) {
if (queue.peek().left != null) {
queue.offer(queue.peek().left);
}
if (queue.peek().right != null) {
queue.offer(queue.peek().right);
}
//访问完就出队
list.add(queue.poll().val);
num--;
}
//每次都从开始插入数据,保证数据是从叶子到根
result.add(0, list);
}
return result;
}