publicList<List<Integer>>levelOrder(TreeNode root){List<List<Integer>> res =newArrayList<>();Queue<TreeNode> queue =newLinkedList<>();if(root !=null){//队列中加入初始节点
queue.offer(root);}while(!queue.isEmpty()){//只要队列不为空就一直进行int n = queue.size();List<Integer> level =newArrayList<>();for(int i =0; i < n; 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);}}
res.add(level);}return res;}
三、图论的DFS
核心思想在于上下左右的操作,以及边界的判断
例题:力扣200.岛屿数量
int result=0;publicintnumIslands(char[][] grid){int result=0;for(int i=0;i<grid.length;i++){for(int j=0;j<grid[0].length;j++){if(grid[i][j]=='1'){
result++;dfs(grid,i,j);}}}return result;}publicvoiddfs(char[][] grid,int r,int c){// 判断 base caseif(!inArea(grid, r, c)){return;}// 如果这个格子不是岛屿,直接返回if(grid[r][c]!='1'){return;}
grid[r][c]='0';// 将格子标记为「已遍历过」// 访问上、下、左、右四个相邻结点dfs(grid, r -1, c);dfs(grid, r +1, c);dfs(grid, r, c -1);dfs(grid, r, c +1);}// 判断坐标 (r, c) 是否在网格中publicbooleaninArea(char[][] grid,int r,int c){return0<= r && r < grid.length
&&0<= c && c < grid[0].length;}