给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。
示例:
输入:[ 1 , 2 , 3 , 4 , 5 , null, 7 , 8 ]
1
/ \
2 3
/ \ \
4 5 7
/
8
输出:[ [ 1 ] , [ 2 , 3 ] , [ 4 , 5 , 7 ] , [ 8 ] ]
代码
class Solution {
public ListNode[ ] listOfDepth ( TreeNode tree) {
Queue< TreeNode> queue= new LinkedList < > ( ) ;
ArrayList< ListNode> arrayList= new ArrayList < > ( ) ;
queue. add ( tree) ;
while ( ! queue. isEmpty ( ) )
{
int size= queue. size ( ) ;
ListNode head= new ListNode ( 0 ) ;
ListNode helper= head;
for ( int i= 0 ; i< size; i++ )
{
TreeNode temp= queue. poll ( ) ;
ListNode temp2= new ListNode ( temp. val) ;
helper. next= temp2;
helper= temp2;
if ( temp. left!= null) queue. offer ( temp. left) ;
if ( temp. right!= null) queue. offer ( temp. right) ;
}
arrayList. add ( head. next) ;
}
ListNode[ ] listNodes= new ListNode [ arrayList. size ( ) ] ;
for ( int i= 0 ; i< arrayList. size ( ) ; i++ ) listNodes[ i] = arrayList. get ( i) ;
return listNodes;
}
}