题目描述
给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。
代码实现
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode[] listOfDepth(TreeNode tree) {
LinkedList<TreeNode> queue = new LinkedList<>();//队列
ArrayList<ListNode> res = new ArrayList<ListNode>();
queue.offer(tree);
ListNode dummy = new ListNode(0);//构造虚拟头节点
while(!queue.isEmpty()) {//队列不为空就循环操作
int size = queue.size();
ListNode cur = dummy;//用来遍历
for(int i = 0; i < size; i++) {//遍历队列,依次拿出队列里的想同层的元素
TreeNode treeNode = queue.poll();
cur.next = new ListNode(treeNode.val);
if(treeNode.left != null) {
queue.offer(treeNode.left);
}
if(treeNode.right != null) {
queue.offer(treeNode.right);
}
cur = cur.next;
}
res.add(dummy.next);
dummy.next = null;//一层元素添加完之后,重置虚拟头节点的指向
}
return res.toArray(new ListNode[res.size()]);//列表转为数组
}
}