给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。
示例:
输入:[1,2,3,4,5,null,7,8]
1
/ \
2 3
/ \ \
4 5 7
/
8
输出:[[1],[2,3],[4,5,7],[8]]
/**
* 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) {
if(tree==null) return new ListNode[0];
Queue<TreeNode> queue = new LinkedList<>();
List<ListNode> list = new ArrayList<>();
queue.offer(tree);
while(!queue.isEmpty()){
ListNode head = new ListNode(0);
ListNode temp = head;
int size = queue.size();
for(int i=0; i<size; i++){
TreeNode node = queue.poll();
temp.next = new ListNode(node.val);
temp = temp.next;
if(node.left!=null){
queue.offer(node.left);
}
if(node.right!=null){
queue.offer(node.right);
}
}
temp.next = null;
list.add(head.next);
}
ListNode[] ret = new ListNode[list.size()];
list.toArray(ret);
return ret;
}
}
Java ArrayList toArray() 方法
toArray() 方法将 Arraylist 对象转换为数组。
import java.util.ArrayList;
import java.util.Comparator;
class Main {
public static void main(String[] args){
// 创建一个动态数组
ArrayList<String> sites = new ArrayList<>();
sites.add("Runoob");
sites.add("Google");
sites.add("Wiki");
sites.add("Taobao");
System.out.println("网站列表: " + sites);
// 创建一个新的 String 类型的数组
// 数组长度和 ArrayList 长度一样
String[] arr = new String[sites.size()];
// 将ArrayList对象转换成数组
sites.toArray(arr);
// 输出所有数组的元素
System.out.print("Array: ");
for(String item:arr) {
System.out.print(item+", ");
}
}
}