解题思路:层级遍历
看本题思路之前首先看
1.从上到下打印二叉树1:https://blog.youkuaiyun.com/Mr_Jiax/article/details/109783502
2.从上到下打印二叉树2:https://blog.youkuaiyun.com/Mr_Jiax/article/details/109787419
3.在前两题的基础上,设置一个标志位flag,如果为true,则从左到右打印,如果为false,则从右到左打印
4.在从上到下打印二叉树2:https://blog.youkuaiyun.com/Mr_Jiax/article/details/109787419的基础上如何实现从左到右和从右到左?如果从左到右,则从尾部插入list,如果从右到左,则从list头部(即下标为0)的位置插入
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
if(root==null){
return new ArrayList<>();
}
Queue<TreeNode> queue=new LinkedList<>();
List<Integer> list;
List<List<Integer>> res=new ArrayList<>();
queue.add(root);
boolean flag=true;
while(!queue.isEmpty()){
int levelNum=queue.size();
list=new ArrayList<>();
for(int i=0;i<levelNum;i++){
TreeNode node=queue.poll();
if(flag){
list.add(node.val);//从尾部插入,实现从左向右
}else{
list.add(0,node.val);//从头部插入,实现从右到左输出
}
if(node.left!=null){
queue.add(node.left);
}
if(node.right!=null){
queue.add(node.right);
}
}
flag=(!flag);
res.add(list);
}
return res;
}
}