难顶,断开连接半个月,公司项目太忙都没时间学习一下。吐槽一下
思路:二叉树的广度优先搜索,将每一层的数据放入一个list中,然后在将每层数据list放入总的list集合中
代码如下:
/**
* 使用二叉树层级遍历,每次将一层数据放入集合中,再将每层的集合插入list的首位
**/
class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> resList = new ArrayList<>();
if(root == null) {
return resList;
}
Queue<TreeNode> queue = new LinkedList<>();
//放入根节点
queue.add(root);
while (!queue.isEmpty()) {
//层级集合,将一层数据放入层级集合中
List<Integer> list = new ArrayList<>();
//记录每一层的长度,本来我直接写到循环里 i<queue.size,写完发现 queue长度会变。
int len = queue.size();
for(int i = 0; i < len; i++) {
TreeNode treeNode = queue.poll();
list.add(treeNode.val);
//将下一层的数据放入queue中
if(treeNode.left != null) {
queue.add(treeNode.left);
}
if(treeNode.right != null) {
queue.add(treeNode.right);
}
}
//将当前层数据放入集合头部
resList.add(0, list);
}
return resList;
}
}