【每日一题】【队列初始化&工具类&层次遍历无需递归】2022年1月29日-NC14 按之字形顺序打印二叉树
描述
给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)
注意:树的初始化
public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }
类似:链表的初始化
public class LinkNode { int val; LinkNode next = null; public LinkNode(int val) { this.val = val; } }
方法1:普通队列进行层次遍历,隔层使用一次工具类进行翻转
import java.util.*; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { /** 使用队列实现层次遍历(先进先出) 层次遍历判断每一层元素个数不用递归,可以直接看queue的size **/ public ArrayList> Print(TreeNode pRoot) { ArrayList > res = new ArrayList<>(); if(pRoot == null) { return res; } Queue queue = new LinkedList<>(); queue.offer(pRoot); int index = 0; while(!queue.isEmpty()) { int size = queue.size(); ArrayList arr = new ArrayList<>(); for(int i = 0; i < size; i++) { TreeNode node = queue.poll(); arr.add(node.val); if(node.left != null) { queue.offer(node.left); } if(node.right != null) { queue.offer(node.right); } } if(index % 2 != 0) { Collections.reverse(arr); } index++; res.add(arr); } return res; } }
注意:队列的初始化是new LinkedList<>();