给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。
示例:
输入:[1,2,3,4,5,null,7,8]
1
/ \
2 3
/ \ \
4 5 7
/
8
输出:[[1],[2,3],[4,5,7],[8]]
题解:这题和04.01相似,通过队列来进行二叉树的层次遍历。
/**
* 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) {
// 使用队列来进行层次遍历
ListNode[] ans = null;
if(tree == null) {
return ans;
}
if( tree.left == null && tree.right == null){
ans = new ListNode[1];
ans[0] = new ListNode(tree.val);
return ans;
}
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(tree);
List<ListNode> list = new ArrayList<ListNode>();
while(!queue.isEmpty()){
int size = queue.size();
ListNode node = new ListNode(-1);
ListNode p = node;
for(int i= 0; i< size; i++){
TreeNode root = queue.poll();
ListNode newNode = new ListNode(root.val);
p.next = newNode;
p = newNode;
if(root.left != null){
queue.offer(root.left);
}
if(root.right != null){
queue.offer(root.right);
}
}
list.add(node.next);
}
int listsize = list.size();
ans = new ListNode[listsize];
for(int i=0 ; i< listsize; i++){
ans[i] = list.get(i);
}
return ans;
}
}