这道题和116.填充每个节点的下一个右侧节点指针这道题是一模一样。
这里就总结一下。两道题的一个关键点都是要遍历到树的每一层的最后一个节点。而116题还要寻找的一个节点就是每一层的第一个节点。
那么如何找每层的首尾节点?BFS
假如当前在root处,那么这个时候应该将下一层的所有节点都放到list当中,接着就是将下一层的节点一个一个拿出来,第一个拿出来的和最后一个拿出来的便是ans
if (root == null) {
return new ArrayList<>();
}
Queue<TreeNode> list = new LinkedList<>();
List<Integer> ans = new ArrayList<>();
list.add(root);
while (!list.isEmpty()) {
int size = list.size();
for (int i = 0; i < size; i++) {
TreeNode cur = list.poll();
if (cur.left != null) {
list.add(cur.left);
}
if (cur.right != null) {
list.add(cur.right);
}
if (i == size - 1) {
ans.add(cur.val);
}
}
}
return ans;