题解 | #按之字形顺序打印二叉树#
按之字形顺序打印二叉树
https://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0
import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * public TreeNode(int val) { * this.val = val; * } * } */ //方法:基于层序遍历,加入标识符flag public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param pRoot TreeNode类 * @return int整型ArrayList<ArrayList<>> */ public ArrayList<ArrayList<Integer>> Print (TreeNode pRoot) { //判断是否为空树,是则返回空列表 if(pRoot==null){ return new ArrayList<>(); } //定义外层列表 ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); //定义队列用来记录元素 Queue<TreeNode> q = new LinkedList<>(); q.add(pRoot); //定义标识符flag 若为false则是从左到右打印,若为true则是从右至左打印 boolean flag = false; while(!q.isEmpty()){ int n = q.size(); ArrayList<Integer> lever = new ArrayList<>(); for(int i=0;i<n;i++){ TreeNode node= q.poll();//q:1 23 45 lever.add(node.val); if(node.left!=null){ q.add(node.left); } if(node.right!=null){ q.add(node.right); } } if(flag){ Collections.reverse(lever);//若为true,就将队列反转,变为从右至左 } flag = !flag; res.add(lever); } return res; } }