题目
给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 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) {
List<ListNode> list = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
queue.add(tree);
while (!queue.isEmpty()) {
int size = queue.size();
ListNode lNode = new ListNode();
for (int i = 0; i < size; i++) {
TreeNode tNode = queue.poll();
lNode.next = new ListNode(tNode.val);
lNode = lNode.next;
// 左子树
if (tNode.left != null) queue.offer(tNode.left);
// 右子树
if (tNode.right != null) queue.offer(tNode.right);
// 将头结点放入list中
if (i == 0) list.add(lNode);
}
}
return list.toArray(new ListNode[0]);
}
}