层序遍历(需要知道层数)
每次把当前层的所有节点加入另一个队列
当当前队列没有元素时切换到另一个队列,然后另一个队列初始化
import java.util.*; public class Solution { public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) { if (root == null) return new ArrayList<ArrayList<Integer>>(); Queue<TreeNode> queue = new LinkedList<>(); Queue<TreeNode> queue2 = new LinkedList<>(); queue.add(root); ArrayList<ArrayList<Integer>> res = new ArrayList<>(); ArrayList<Integer> arr = new ArrayList<>(); while(!queue.isEmpty()) { TreeNode t = queue.poll(); arr.add(t.val); if (t.left != null) queue2.add(t.left); if (t.right != null) queue2.add(t.right); if (queue.isEmpty()) { //当当前队列为空 queue = queue2; //切换到另一个队列 queue2 = new LinkedList<>(); //另一个队列初始化 res.add(arr); arr = new ArrayList<>(); } } return res; } }