题解 | #求二叉树的层序遍历#
求二叉树的层序遍历
http://www.nowcoder.com/practice/04a5560e43e24e9db4595865dc9c63a3
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型ArrayList<ArrayList<>>
*/
/*
广度优先遍历,非递归方法:
1.头节点入队
2.当队列不空,执行下面内容
1.队首元素出队列
2.打印该节点
3.该节点所有子节点入队
3.结束
题目要求 分层打印,所以改为
1.队中所有节点出队列
2.依次打印所有节点
3.所有节点的子节点依次入队列
*/
public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
// write code here
TreeNode temp = null; // 保存出队节点
// 队列
LinkedList<TreeNode> list = new LinkedList<>();
ArrayList<ArrayList<Integer>> returnList = new ArrayList<>();
// 头节点入队
if(root != null){
list.addFirst(root);
}
// 开始层次遍历
while(!list.isEmpty()){
// 为了能一层一层的打印,必须出队所有节点
int size = list.size(); // 保存这一层的节点个数
// 创建这一层的ArrayList
ArrayList<Integer> thisList = new ArrayList<>();
for(int i=0;i<size; i++){ // 这一层节点出队列
temp = list.removeFirst(); // 一个节点出队
thisList.add(temp.val); // 保存值
// 出队节点左右节点入队
if(temp.left != null){
list.add(temp.left);
}
if(temp.right != null){
list.add(temp.right);
}
}
// 这一层数据加入returnList
returnList.add(thisList);
}
// 返回结果
return returnList;
}
}