题目
代码
package 力扣;
import java.util.*;
public class T107二叉树的层次遍历 {
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public static void main(String[] args) {
//[3,9,20,null,null,15,7],
//测试用例1 -- 力扣的例子
TreeNode node1 = new TreeNode(3);
TreeNode node2 = new TreeNode(9);
TreeNode node3 = new TreeNode(20);
TreeNode node4 = new TreeNode(15);
TreeNode node5 = new TreeNode(7);
node1.left = node2;
node1.right = node3;
node3.left = node4;
node3.right = node5;
// 测试用例2 不要忘记输入的时候就是空值
// TreeNode node1 = null;
List<List<Integer>> list = levelOrderBottom(node1);
System.out.println(list.toString());
}
public static List<List<Integer>> levelOrderBottom(TreeNode root) {
//最终答案
List<List<Integer>> ans = new LinkedList<List<Integer>>();
//队列用于广搜
Queue<TreeNode> queue = new LinkedList<>();
//存放每一层
if(root!=null)
queue.add(root);
bfs(ans,queue);
return ans;
}
private static void bfs(List<List<Integer>> ans, Queue<TreeNode> queue) {
if(queue.isEmpty()) return;
//合成这一层的node 的值组成<List<Integer>加入到ans
List<Integer> list = new LinkedList<>();
//通过上一层的队列来组成下一层的队列
Queue<TreeNode> queue2 = new LinkedList<>();
TreeNode node;
while(!queue.isEmpty()) {
//取队头
node = queue.poll();
//将这一层的所有val加入list
list.add(node.val);
if(node.left!=null) {
//如果左节点存在将左节点加入下一层的队列
queue2.add(node.left);
}
if(node.right!= null) {
//如果右节点存在将右节点加入下一层的队列
queue2.add(node.right);
}
}
//广搜下一层
bfs(ans,queue2);
ans.add(list);
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}