classSolution{publicint[]levelOrder(TreeNode root){//判断特殊情况if(root ==null){int[] result ={};return result;}//层序遍历,使用队列Queue<TreeNode> queue =newLinkedList<>();ArrayList<Integer> res =newArrayList<>();//初始化
queue.offer(root);//开始遍历while(!queue.isEmpty()){int leng = queue.size();//每层的长度for(int i =0; i < leng; i++){TreeNode cur = queue.poll();if(cur.left !=null) queue.offer(cur.left);if(cur.right !=null) queue.offer(cur.right);
res.add(cur.val);}}//将可变数组转为数组int[] result =newint[res.size()];
result = res.stream().mapToInt(Integer::valueOf).toArray();//也可遍历赋值// for(int i = 0; i < res.size(); i++)// result[i] = res.get(i);return result;}}
JZ32-II 从上到下打印二叉树II
层序遍历,每一层保存为一个数组。
时间复杂度O(n),空间复杂度O(n)
classSolution{publicList<List<Integer>>levelOrder(TreeNode root){//层序遍历,使用队列Queue<TreeNode> queue =newLinkedList<>();ArrayList<List<Integer>> res =newArrayList<>();//判断特殊情况if(root ==null)return res;
queue.offer(root);//初始化while(!queue.isEmpty()){int leng = queue.size();//每层长度ArrayList<Integer> resLine =newArrayList<>();for(int i =0; i < leng; i++){TreeNode cur = queue.poll();if(cur.left !=null) queue.offer(cur.left);if(cur.right !=null) queue.offer(cur.right);
resLine.add(cur.val);//保存该层元素}
res.add(resLine);//保存每层结果}//将可变数组转为数组return res;}}
JZ32-III 从上到下打印二叉树III
层序遍历,使用双端队列(存过程或结果),每一层保存为一个数组,同时定义变量决定当前层为正序或反序。
时间复杂度O(n),空间复杂度O(n)
classSolution{//过程publicList<List<Integer>>levelOrder(TreeNode root){//层序遍历,使用双端队列Deque<TreeNode> deque =newLinkedList<>();ArrayList<List<Integer>> res =newArrayList<>();//判断特殊情况if(root ==null)return res;
deque.offer(root);//初始化boolean flag =true;//决定当前层遍历顺序,true为正序,false为反序while(!deque.isEmpty()){int leng = deque.size();//当前层长度ArrayList<Integer> resLine =newArrayList<>();TreeNode cur =newTreeNode(-1);for(int i =0; i < leng; i++){if(flag){//正序
cur = deque.pollFirst();if(cur.left !=null) deque.offerLast(cur.left);if(cur.right !=null) deque.offerLast(cur.right);}else{
cur = deque.pollLast();if(cur.right !=null) deque.offerFirst(cur.right);if(cur.left !=null) deque.offerFirst(cur.left);}
resLine.add(cur.val);}
res.add(resLine);
flag =!flag;}return res;}//结果publicList<List<Integer>>levelOrder(TreeNode root){//层序遍历,使用队列Queue<TreeNode> queue =newLinkedList<>();ArrayList<List<Integer>> res =newArrayList<>();//判断特殊情况if(root ==null)return res;
queue.offer(root);//初始化boolean flag =true;//决定当前层遍历顺序,true为正序,false为反序while(!queue.isEmpty()){int leng = queue.size();//每层长度Deque<Integer> resLine =newLinkedList<>();//使用双端队列for(int i =0; i < leng; i++){TreeNode cur = queue.poll();if(flag){//正序
resLine.offerLast(cur.val);}else{//反序
resLine.offerFirst(cur.val);}if(cur.left !=null) queue.offer(cur.left);if(cur.right !=null) queue.offer(cur.right);}
res.add(newLinkedList<Integer>(resLine));//保存每层结果
flag =!flag;}//将可变数组转为数组return res;}}