算法思路
要对二叉树做层序遍历,那么要先能够知道当前层有哪些元素,然后按顺序从左往右遍历,这里最容易想到的就是用队列来存储了,队列的FIFO特性保证遍历顺序;遍历过程中保存好当前层遍历结果以及下一层的元素,然后递归直到二叉树遍历完;
算法实现
public class Solution {
private static final Queue<TreeNode> curLevelNodes = new ArrayDeque<>();
private static final ArrayList<ArrayList<Integer>> result = new ArrayList<>();
/**
*
* @param root TreeNode类
* @return int整型ArrayList<ArrayList<>>
*/
public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
if (root != null) {
curLevelNodes.add(root);
}
levelOrder(curLevelNodes);
return result;
}
private void levelOrder(Queue<TreeNode> curLevelNodes) {
if (curLevelNodes.isEmpty()) {
return;
}
ArrayList<Integer> levelResult = new ArrayList<>();
Queue<TreeNode> nextLevelNodes = new ArrayDeque<>();
// 层序遍历
TreeNode headNode;
while ((headNode = curLevelNodes.poll()) != null) {
levelResult.add(headNode.val);
if (headNode.left != null) {
nextLevelNodes.offer(headNode.left);
}
if (headNode.right != null) {
nextLevelNodes.offer(headNode.right);
}
}
// 保存层序遍历结果以及下一层节点
result.add(levelResult);
curLevelNodes.addAll(nextLevelNodes);
levelOrder(curLevelNodes);
}
} 
京公网安备 11010502036488号