public class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
if (root == null) {
return res;
}
//队列是先进先出的
Queue<TreeNode> q = new LinkedList<>();
//进入队列
q.offer(root);
while(!q.isEmpty()) {
//创建一个临时动态数组
List<Integer> temp = new ArrayList<>();
int len = q.size();
//主要是为了让同一层次的节点出队列
for (int i = 0; i < len; i++){
//弹出队列
TreeNode node = q.poll();
temp.add(node.val);
//统一层的节点加入队列中
if (node.left != null){
q.offer(node.left);
}
if (node.right != null){
q.offer(node.right);
}
}
res.add(temp);
}
return res;
}
}
主要解题思路
- 创建一个队列用来接收层级节点,创建一个二维的动态数组
- 接收完节点,通过循环将层级节点弹出队列,并把节点的值存进临时的动态数组
- 判断层级节点的左孩子和右孩子是否存在
- 如果存在,重复2、3步骤