我们可以想到最朴素的方法是用一个二元组 (node, level) 来表示状态它表示某个节点和它所在的层数每个新进队列的节点的 level 值都是父亲节点的 level 值加一。class Solution { public ListListInteger levelOrder(TreeNode root) { //返回每一层节点值组成的二维列表 ListListInteger ret new ArrayListListInteger(); if (root null) { return ret; } QueueTreeNode queue new LinkedListTreeNode(); // 将根节点入队作为BFS搜索起点 queue.offer(root); // while循环队列不为空说明还有节点没有遍历 while (!queue.isEmpty()) { // level临时存放【当前这一层】所有节点的值 ListInteger level new ArrayListInteger(); // 记录当前层的节点数量重点for循环只处理这一层的节点 int currentLevelSize queue.size(); // for循环循环currentLevelSize次逐个取出当前层节点 for (int i 1; i currentLevelSize; i) { TreeNode node queue.poll(); level.add(node.val); if (node.left ! null) { queue.offer(node.left); } if (node.right ! null) { queue.offer(node.right); } } ret.add(level); } return ret; } }
阅读完成 · 觉得有帮助?