解法1 - 递归
class Solution {
List< List< Integer> > levels = new ArrayList < List< Integer> > ( ) ;
public List< List< Integer> > levelOrder ( TreeNode root) {
if ( root == null) return levels;
helper ( root, 0 ) ;
return levels;
}
public void helper ( TreeNode node, int level) {
if ( levels. size ( ) == level)
levels. add ( new ArrayList < Integer> ( ) ) ;
levels. get ( level) . add ( node. val) ;
if ( node. left != null) helper ( node. left, level + 1 ) ;
if ( node. right != null) helper ( node. right, level + 1 ) ;
}
}
解法2 - 非递归
class Solution {
public List< List< Integer> > levelOrder ( TreeNode root) {
List< List< Integer> > levels = new ArrayList < > ( ) ;
if ( root == null) return levels;
Queue< TreeNode> queue = new LinkedList < TreeNode> ( ) ;
queue. offer ( root) ;
int level = 0 ;
while ( ! queue. isEmpty ( ) ) {
levels. add ( new ArrayList < Integer> ( ) ) ;
int size = queue. size ( ) ;
while ( size > 0 ) {
TreeNode node = queue. poll ( ) ;
levels. get ( level) . add ( node. val) ;
if ( node. left != null) queue. offer ( node. left) ;
if ( node. right != null) queue. offer ( node. right) ;
size-- ;
}
level++ ;
}
return levels;
}
}