二叉树的层序遍历
public class LevelOrder {
public List< List< Integer>> levelOrder( TreeNode root) {
List< List< Integer>> ret = new ArrayList< List< Integer>> ( ) ;
if ( root == null) {
return ret;
}
//利用队列做辅助结构
Queue< TreeNode> queue = new LinkedList< TreeNode> ( ) ;
queue.offer( root) ;
while ( ! queue.isEmpty( )) {
List< Integer> level = new ArrayList< Integer> ( ) ;
int currentLevelSize = queue.size( ) ;
while( currentLevelSize> 0 ) {
//先将队列的队头取出
TreeNode node = queue.poll( ) ;
level.add( node.val) ;
//然后再将此节点的左右节点进行入队
if ( node.left!= null) queue.offer( node.left) ;
if ( node.right!= null) queue.offer( node.right) ;
//对队长进行减减
currentLevelSize--;
}
//然后将树此层的节点压入链表中
ret.add( level) ;
}
return ret;
}
public static void main( String[ ] args) {
TreeNode treeNode = new TreeNode( 1 ) ;
treeNode.left = new TreeNode( 2 ) ;
treeNode.right = new TreeNode( 3 ) ;
treeNode.left.left = new TreeNode( 4 ) ;
treeNode.left.right = new TreeNode( 5 ) ;
List< List< Integer>> list = new LevelOrder( ) .levelOrder( treeNode) ;
System.out.println( list) ;
}
}
思路:利用队做辅助结构,因为层序遍历,是从左到右的顺序遍历,所以使用队,不使用栈,栈适合深度遍历。