题目描述:
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
参考代码:
public List<List<Integer>> levelOrder(TreeNode root) {
LinkedList<List<Integer>> res = new LinkedList<>();//存放结果的列表
LinkedList<TreeNode> queue = new LinkedList<>();//设置一个队列
if(root!= null)queue.add(root);//头结点入队
while(!queue.isEmpty()){//队不为null,出队
LinkedList<Integer> list = new LinkedList<>();//结果列表中的元素类型为List
for(int i = queue.size(); i > 0; i--){//这里循环为size~1,这样可以将每一层的元素全部出队,不能写成1~size,这样的话size一直在变化,会出错
TreeNode node = queue.poll();//元素出队
if(res.size() % 2 == 0)list.addLast(node.val);//res中还是存列表,当有偶数个列表时,新的列表插入队尾;
else list.addFirst(node.val);//res中还是存列表,当有奇数个列表时,新的列表插入队头,这样就实现了反转;
if(node.left != null)queue.add(node.left);//左结点进队
if(node.right != null)queue.add(node.right);//右节点进队
}
res.add(list);//最后list进res队列
}
return res;
}