题解 | #求二叉树的层序遍历#
求二叉树的层序遍历
http://www.nowcoder.com/practice/04a5560e43e24e9db4595865dc9c63a3
思路:
- 常规bfs
- 层序遍历
- 使用一个队列维护当前遍历二叉树层的节点集
ps:
主要需要注意空的特殊情况
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
Deque<TreeNode> dq = new LinkedList<>();
/**
*
* @param root TreeNode类
* @return int整型ArrayList<ArrayList<>>
*/
public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
//二叉树为空,直接返回
if(root == null) return res;
//bfs层次遍历
dq.add(root);
while(dq.size() > 0){
bfs();
}
return res;
}
public void bfs(){
//获得当前层中节点个数
int len = dq.size();
//if(len <= 0) return;
ArrayList<Integer> temp = new ArrayList<>();
//循环添加节点入临时链表
for(int i = 0; i < len; i++){
TreeNode cur = dq.pollFirst();
temp.add(cur.val);
//左子节点非空,添加入队列
if(cur.left != null) dq.addLast(cur.left);
//右子节点非空,添加入队列
if(cur.right != null) dq.addLast(cur.right);
}
//将每层结果加入结果
res.add(temp);
}
}
