面试题 04.03. 特定深度节点链表
层序遍历加虚拟节点
思路
本题显然需要使用树的层序遍历,关键是怎么把各层节点放入一个串联起来的链表
- 使用队列进行层序遍历
- 虚拟节点
实现代码
class Solution {
public ListNode[] listOfDepth(TreeNode tree) {
ListNode dummy = new ListNode(0);
LinkedList<TreeNode> queue = new LinkedList<>();
List<ListNode> res = new ArrayList<>();
TreeNode root;
queue.add(tree);
int size;
while(!queue.isEmpty()){
ListNode cur = dummy;
//这里记录当前队列的大小,不能在for循环中判断队列大小 因为for循环中
//左右孩子存在,队列会变长
size = queue.size();
for(int i = 0; i < size; i++){
root = queue.remove();
cur.next = new ListNode(root.val);
if(root.left != null){
queue.add(root.left);
}
if(root.right != null){
queue.add(root.right);
}
cur = cur.next;
}
res.add(dummy.next);
}
return res.toArray(new ListNode[]{});
}
}