给一个二叉树,返回其按层序遍历得到的节点值(即逐层地,从左到右访问所有节点)
迭代
先将根节点入队列 队列不为空时,要实时更新当前队列长度,节点出队并记录,左右子节点不为空就入队
class Solution {
public List< List< Integer> > levelOrder ( TreeNode root) {
List< List< Integer> > res= new ArrayList < > ( ) ;
if ( root== null) { return res; }
Queue< TreeNode> queue= new LinkedList < > ( ) ;
queue. offer ( root) ;
while ( queue. size ( ) > 0 ) {
int size= queue. size ( ) ;
List< Integer> list= new LinkedList < > ( ) ;
for ( int i= 0 ; i< size; i++ ) {
TreeNode cur= queue. poll ( ) ;
if ( cur!= null) {
list. add ( cur. val) ;
if ( cur. left!= null) { queue. offer ( cur. left) ; }
if ( cur. right!= null) { queue. offer ( cur. right) ; }
}
}
res. add ( list) ;
}
return res;
}
}
递归
class Solution {
public List< List< Integer> > levelOrder ( TreeNode root) {
List< List< Integer> > res= new ArrayList < > ( ) ;
if ( root== null) { return res; }
bfs ( root, res, 1 ) ;
return res;
}
public void bfs ( TreeNode root, List< List< Integer> > res, int level) {
if ( level> res. size ( ) ) { res. add ( new ArrayList < > ( ) ) ; }
res. get ( level- 1 ) . add ( root. val) ;
if ( root. left!= null) { bfs ( root. left, res, level+ 1 ) ; }
if ( root. right!= null) { bfs ( root. right, res, level+ 1 ) ; }
}
}