层序遍历思路:树空时回空。 否则,从树的第一层开始,也就是从根节点开始,从上到下逐层遍历。
1 .二叉树层序横移——剑指进刀32-
从上到下,从左到右打印二叉树,返回一维数组int[] res。
类解决方案{
公共int [ ] level order (趋势根)。
if(root==null )返回新int [0];
queue q=新链接列表(;
q .添加(根);
列表列表=new ArrayList (;
while (! q.isEmpty () ) }
TreeNode node=q.poll (;
list.add(node.val );
if(node.left!=null q.add (node.left );
if(node.right!=null q.add (node.right );
}
int[]RES=newint[list.size(];
for(intI=0; i res.length; I )
RES[I]=list.get(I;
返回RES;
}
}
2 .二叉树层序遍历——剑指offer32-/LeetCode102
从上到下,从左到右打印二叉树,返回List res。
类解决方案{
publiclistlevelorder (趋势根)。
List res=new ArrayList (;
queue q=新链接列表(;
if (路线!=null ) q.add (根);
while (! q.isEmpty () ) }
列表列表=new ArrayList (;
for(intI=q.size ); i 0; I---- ) {
TreeNode node=q.poll (;
list.add(node.val );
if(node.left!=null q.add (node.left );
if(node.right!=null q.add (node.right );
}
RES.add (列表);
}
返回RES;
}
}
3 .二叉树层序遍历——剑指offer32-/LeetCode103
从上到下,用zigzag方式打印,返回List res。
类解决方案{
publiclistzigzaglevelorder (趋势根) {
List res=new ArrayList (;
queue q=新链接列表(;
if (路线!=null ) q.add (根);
while (! q.isEmpty () ) }
链接列表列表=new linked list (;
for(intI=q.size ); i 0; I---- ) {
TreeNode node=q.poll (;
if(RES.size(%2==0) list.addlast ) node.val );
elselist.addfirst(node.val );
if(node.left!=null q.add (node.left );
if(node.right!=null q.add (node.right );
}
RES.add (列表);
}
返回RES;
}
}
4 .二叉树层序遍历——LeetCode107
从下到上,从左到右打印二叉树,返回List res。
类解决方案{
publiclistlevelorderbottom (趋势根)。
List res=new ArrayList (;
queue q=新链接列表(;
if (路线!=null ) q.add (根);
while (! q.isEmpty () ) }
列表列表=new ArrayList (;
for(intI=q.size ); i 0; I---- ) {
TreeNode node=q.poll (;
list.add(node.val );
if(node.left!=null q.add (node.left );
if(node.right!=null q.add (node.right );
}
//插头法
RES.add(0,list );
}
返回RES;
}
}