题目
给定一个二叉树,返回其按层次遍历的节点值。 (即zhu'ceng'de,从左到右访问)。
例如:
给定二叉树: [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回其层次遍历结果为:
[ [3], [9,20], [15,7] ]
解题思路
使用两队列,一个保存当前处理的层,一个保存下一次要处理的层。只到每一层都处理完。
代码实现
树结点类
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
Java算法实现:
import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
public class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
if (root == null) {
return result;
}
Deque<TreeNode> cur = new LinkedList<>(); //队列保存一层
Deque<TreeNode> sub = new LinkedList<>(); //队列保存下一层
Deque<TreeNode> exc;
TreeNode node;
cur.addLast(root); //先保存根节点
while(!cur.isEmpty()) {
List<Integer> layout = new LinkedList<>(); //保存一层的节点
while(!cur.isEmpty()) {
node = cur.removeFirst(); //弹出前面第一个节点
layout.add(node.val); //添加到队列里面
if (node.left != null) { //把弹出的节点的左节点加入另一个队列
sub.addLast(node.left);
}
if (node.right != null) { //把弹出的节点的右节点加入另一个队列
sub.addLast(node.right);
}
}
exc = cur; //交换
cur = sub;
sub = exc;
result.add(layout); //添加到结果集里
}
return result;
}
}